完全に実力不足な理系大学生からの成長ブログ

プログラミング能力皆無、でも頑張ります。

大学生活を経て思うこと

こんにちはよりです.

もう大学生活もあとちょっとで終わるので(当時),
僕の大学生活で良かった点,悪かった点をまとめます.



僕が本当に良かったと思っていることは最後の1年間に集約されています.

普通,大学生って1年でいっぱい出会いがあると思うんですけど,
僕はなぜか大学4年になって突然色々な出会いがありました.

そこで,大学ってこんなに色々な人がいて,色々なことができて,
色々なことを学べる場所なんだって思いました.

自分よりはるかに頭がいい人達と話すことは刺激になったし,
やる気を駆り立ててくれました.

情報系は自分の専門分野なはずなのに,
いかに何もできないで何も知らないで4年になってしまったのかを痛感しました.

研究面では今までで一番プログラミングをしました.

(当時の僕には)無理難題だと思われる技術の勉強をしなきゃいけなくて,
ぶっちゃけ,
「こんなアルゴリズムを実装することなんて素人にできるのかよ」
とか思ってました(笑)
本当に何もしてなかったので…

きっと強い人たちは
「論文に乗ってるアルゴリズム動かさなきゃ始まらんだろ」
とか思ってると思います.
それができない僕はかなり辛かったです.

そんな時のモチベーションは
研究室の仲間だったり
周りのレベルの高い人達だったり
教授への恐怖心だったりしましたが笑

とにかく人との繋がりの大切さを痛感した1年でした.
もっと色々な人と話して色々なことに興味を持っていたかった.


もし大学生活,最初からやり直せるなら,
最初からそんな人たちに出会っていて,
僕も勉強頑張ってればなぁとか思います.

更新日現在社会人になってしまってますが,
最後の一年で成長できたことが今に活かせていると感じています.

これから大学生の人たちは,
何事にも関心をもって,積極的に勉強して欲しいです.

OpenCV(Python)で画像をトリミング

抄録が終わったので,一回更新しときます.
なんだかんだアクセスあると嬉しいですね.
なんだかんだ無料で使えるOpenCVはよい.

なんども言いますが,メモ代わりです.

早速コードを.

#OpenCVをインポート
import cv2

if __name__ == '__main__':

  #画像入力
    im = cv2.imread('Lena.bmp',0)
    
    #新しい配列に入力画像の一部を代入
    dst = im[200:400,70:270]
    
    #書き出し
    cv2.imwrite('cut.bmp',dst)


f:id:yori1029:20170115012702j:plain
入力画像


f:id:yori1029:20170115012723j:plain
出力画像



いや,めっちゃ簡単ですよね笑
pythonだとすごい簡単に書ける気がするんですけど.

こんどから簡単な処理はpythonで書くって誓いました.

OpenCV(C++)で自作二次元フィルタと正規化(0~255)

今回は教授から突然2次元フィルタかけてって言われたのでかけましたってだけの話です笑
メモ程度です.

OpenCVってfilter2Dって関数があるからそこにぶっこんでおけば
ガウシアンフィルターとかメディアンフィルターとか簡単にかけれちゃいますよね.
でも自分で作ったフィルターかけるにはどうすればいいの?
って時のためのメモです.

ていうか今回はあえてfilter2Dを使わないでやったんですけど,
本当はfilter2Dを使った方が早いです.
下記のサイトを参考にしてください.
画像フィルタリング — opencv v2.1 documentation

おそらくfilter2Dだとフーリエ変換して周波数空間でフィルターかけてるんだと思います.
よくわからないですけど笑

とにかく今回は画像に直接フィルターをかけます.

早速ソースコードから.

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <math.h>
#include <fstream>
#include <string>
#include <sstream>

using namespace cv;
using namespace std;

//0~255に正規化
Mat normalize(Mat in) {

    //最大と最小の初期値を設定(minが適当なのはやばそう)
    double max = 0;
    double min = 9999;

    //めんどくさいから入力画像をclone
    Mat out = in.clone();

    //最大と最小を取得
    for(int j = 0; j < in.rows; j++){
        for(int i = 0; i < in.cols; i++){
            if(max < in.at<double>(j,i)){
                max = in.at<double>(j,i);
            }
            if(min > in.at<double>(j,i)){
                min = in.at<double>(j,i);
            }
        }
    }
    
    //取得した最大値と最小値で正規化
    for(int j = 0; j < in.rows; j++){
        for(int i = 0; i < in.cols; i++){
            out.at<double>(j,i) = in.at<double>(j,i) * (max - min)/ 255;
        }
    }
  //0~255になったMatを返す
  return in;
}

int main(int argc, char *argv[]){

    //画像入力
    Mat inputimg = imread("01_Lena_syukukaku.bmp_img_6.bmp",0);
    
    //入力画像のコピー
    Mat img = inputimg.clone();
    
    //Matの型をdouble型に変換
    img.convertTo(img,CV_64F);

    //出力用のMat配列を用意
    Mat out = Mat::zeros(inputimg.rows, inputimg.cols, CV_64F);

    //自作二次元フィルター1
    Mat filter1 = (Mat_<double>(3,3) << -0.0625, 0.125, -0.0625,
                                        0.125, 0.75, 0.125,
                                        -0.0625, 0.125, -0.0625);

    //自作二次元フィルター2
    Mat filter2 = (Mat_<double>(3,3) << 0, 0.125, 0,
                                        0.125, 0.5, 0.125,
                                        0, 0.125, 0);

    //画像サイズ分のforループ
    for(int j = 0; j < inputimg.rows; j++){
        for(int i = 0; i < inputimg.cols; i++){
            if(j == 0 || i == 0 || j == inputimg.rows-1 || i == inputimg.cols-1){
                out.at<double>(j,i) = img.at<double>(j,i);
                continue;
                }
            //フィルターサイズ文のforループ
            for(int l = 0; l < filter1.rows; l++){
                for(int k = 0; k < filter1.cols; k++){
                    out.at<double>(j,i) += img.at<double>(j+l-1,i+k-1) * filter2.at<double>(l,k);
                }
            }
        }
    }


    //出力用Mat
    Mat outputimg;
    
    //正規化(上記参照)
    outputimg = normalize(out);
    
    //Matの型変換
    outputimg.convertTo(outputimg,CV_8U);

    //出力
    imwrite("01_Lena_filt2.bmp",outputimg);
    
    //表示
    imshow("out",outputimg);
    //waitKey(0);

    return 0;
}

ポイントは1画素ずつアクセスするところ.
.atを使ってます.
OpenCVは画素単位のアクセスが非常にめんどくさい.
頑張って書きましょう笑

あとはMatの型に注意しなきゃいけないってことくらいですかね.

以上です.

MacにVimの導入

初期化してから環境構築に手間取ってるのでメモ程度に.

Vimにも種類があるみたいなんですけど,調べるとKaoriyaさんのVimが良さそうなのでそれを使います.

下記のサイトからMacにアプリケーションを入れる流れと同じようにMac Vimを入れます.
github.com

これでGUIからVimを使えます.

でもやっぱVimCUIから使うもの.(?)
だから設定をしましょう.

設定的にはおそらく自分の使っているシェルからVimにパスを通す.
僕はoh-my-zshを使いたかったからzshです.
初期はbashなんだと思います.

.zshrcファイルに以下の文を追加します.

alias vim=/Applications/MacVim.app/Contents/MacOS/Vim
alias vi=vim

はい,これでMacVimをターミナルから起動できるようになりましたー!!

Homebrewの導入

こんにちは、先日macを初期化したよりです。
悲しみに包まれながらメモとして色々書いていこうかなって思います。
(以前一回やったことをまた調べるの面倒なので備忘録として)

そもそもHomebrewってなに?

Homebrew(ホームブルー)は、Mac OS Xオペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつである。MacPortsFinkと同様の目的と機能を備えている。LinuxDebianのAPTに似た使用感で急速に利用が広がっている。(Wikipediaより)


なるほど…
正直僕みたいにOpenCV使えればいいや、みたいな人間にはよくわかりません。

そもそも、
WindowsでネットサーフィンとOfficeをちょっと使ってたくらいだし(情報系だけど)には縁がない話なんだろうなぁ…

とりあえず、あってるかわからんけどライブラリを管理する便利なものなんだな!理解。

Homebrewの導入方法

僕も記事書いておきながらググってやったんですけど一応。

まずはXcodeをインストールしてください。
AppStoreに入ってるやつ。

その後下記のコマンドを実行。

$ xcode-select --install

これれコマンドラインツールとやらが使える、とりあえず必要だと理解。

あとはHomebrewのホームページにあるコマンドを実行!
Homebrew — macOS 用パッケージマネージャー

これで入ったっぽいです。



参考にしたのはこちら。
vdeep.net

次はOpenCVを入れていきます。

Mac(OS Sierra)の初期化

こんにちは、クリスマスが近づいてきました。

相変わらず24日予定が無いと思われてるかもしれませんが、
僕は親戚が集まってクリスマスパーティーをすることになりました!やった!(?)

その前日には研究室でもクリスマスパーティーがあるので
過去に例がないくらいクリスマスに予定があるわけです。





さて、この記事は
Kogakuin Univ Advent Calendar 2016 - Adventar
の17日目の記事になります。
遅れてしまって申し訳ない(2016/12/19現在)

タイトルの通り、macの初期化についてです。

一応バージョンとか書くのが普通ですかね?

先ずはバックアップ!!

なんですけど・・・・・、



僕はiCloudに課金して50GBあるのでそこに全部ブッ込んであります。
だからバックアップは取ってません!

ここから初期化!!

とりあえずシステム終了で電源を切ります。

そのあと、command + R + 電源 の長押しで起動してください。
下の画面になったら手を離していいみたいです。
f:id:yori1029:20161217153610j:plain


しばらく待ってたら下の画面になります。
f:id:yori1029:20161217153624j:plain

ディスクユーティリティを選択してください。



f:id:yori1029:20161217153636j:plain
次に左側にあるMacintosh HDを選択してください。


f:id:yori1029:20161217153650j:plain
そしたら消去。


f:id:yori1029:20161217153707j:plain
フォーマットはMac OS Extendedにしてください。
はい、消去。


f:id:yori1029:20161217153745j:plain
そしたらディスクユーティリティは閉じます。

f:id:yori1029:20161217153757j:plainf:id:yori1029:20161217153842j:plain
ついにmacOSの再インストール!!
ここでWi-Fiに繋ぐ必要があった気がする。

指示に従って続ける。

f:id:yori1029:20161217153810j:plainf:id:yori1029:20161217153824j:plainf:id:yori1029:20161217153842j:plainf:id:yori1029:20161217153856j:plainf:id:yori1029:20161217153907j:plainf:id:yori1029:20161217153920j:plain

ここまでやったらかなり待たされます。

その後、ついに「ようこそ」

f:id:yori1029:20161217153932j:plain


各種設定をして…

f:id:yori1029:20161219144103p:plain

f:id:yori1029:20161217154002j:plain


完了!!
f:id:yori1029:20161217154016j:plain

なぜ初期化したのか

はい、これですね。


僕、パソコン詳しくないのに無理して技術的な内容書こうと思ったらダメになっちゃいました!笑

本当は頑張って調べればなんとかなったかもなんですけど笑
無能すぎてダメでした笑

終わりに

みなさん、僕みたいにならないように!!(普通ならない)

アドベントカレンダーの担当は今年最後なんですけど、
来年機会があったらやりたいし、技術的な内容かけるようにしたいなぁって思います。

自己分析ってどーやるの?

どうもこんにちは、そろそろクリスマスです。
12月24日は万が一予定が入った時のために空けてありますが、
予定が入る気配はないです。


さて、関係ないところから始まってしまいましたが
今年は大学のアドベントカレンダーに参加させてもらったので書かせていただきたいと思います。
4年生になってから強い人たちと関われてよかったなぁと思う今日この頃。
とってもありがたいことです。

この記事は、
Kogakuin Univ Advent Calendar 2016 - Adventar
2016 10日目の記事です。


僕は技術ネタほとんどないので就職活動について書こうかなって思います。

就活でやること

まぁまず初めになんですけど就職活動ってやることいっぱいあるんですよ。

たくさんある中、具体的になにすんねん!って一番思ったのが自己分析なのでそれについて書こうかなって思います。


自己分析ってなんのためにやるの?

なんでやるかわかってないとやる気でないですよね笑

目的は、ざっくり言うと自分を理解するためです。


だって、自分がどんな人間なのかわからないと、
何がしたくて何ができるとか考えられないですよね?


例えば、自分の力でバリバリ会社を動かしていきたい!っていう人には
個人の力で影響を与えにくい大企業は向きませんよね?

また、安定した生活を求める人はベンチャー企業には向いていないと思います。


このように自分が将来どのような仕事をしていたいかというイメージは人によって違うと思います。
まずは、このイメージを具体的にしておくことが大切です。
(ちなみに僕は無難に生活することをイメージしていました。)


さらにいうと仕事って生活の一部なわけで仕事以外のことも考えなきゃいけない。

生活を捨ててやりたいことがある人もいるかもしれない。

人と接することが好きなのか、嫌いなのか、

勉強するのが好きか否か、

どこに住みたいか、

実家がいいのか一人暮らしがいいのか、

どんな業界がいいか、



今適当に出しただけでも考えることってたくさんあるんです。
これらのことを考えないで就職してしまうと・・・



「え!?勤務先九州ですか!?」とか

「親もとから離れてないから一人暮らしできないんですか!?」とか

「え、そんなに人と会話しなきゃいけないんですか!?」とか

「プログラミングできなきゃいけないんですか!?」とか…

こんなことにならないようにして欲しいわけです。

自己分析ってどうやるの?

自己分析の時に確認しておきたいことって
さっきあげたようなことを自分で考えればいいんです。

世間一般でどういうやりかたが主流なのかはわかりませんが、
僕がどうやったかを書いていきます。

過去

でも現在の自分がなんでそういう考えを持っているのかっていうのは
過去の経験があるからですよね?

僕は生まれから現在まで、自分がどんな経験をして来たかを書き出しました。

  • 生まれ
  • 幼少期
  • 小学生
  • 中学生
  • 高校生
  • 大学生

の項目にわけて印象深かったことや、その時ごとに将来やりたいと思っていたことを書き出しました。

現在

現在の自分について考えるのが一番大事なのはもちろんです。
でも今の自分について何を考えればいいの?って話ですよね笑

人によって優先順位は色々あると思うんですけど、
何をするのが好きかを考えるのがいいんじゃないかなって思います。


綺麗事みたいになっちゃいますけど僕は、いろんな人の役に立てる仕事したいなーっていうのを軸にしてました。


プログラミングが好き!とか接客が好き!とか実務としてやりたいことでもいいですし、
ゲームが好きだから携わりたい!とか電車が好きだから鉄道会社がいい!とか

何か決めておくといいと思います。


あとは長所や短所ですかね。
面接の場面でも聞かれるので非常に重要です。

ここで自己分析じゃなくって他己分析っていうのになっちゃうんですけど
身近な人に自分の長所と短所を確認するっていうのも大事だと思います。

今回は自己分析のお話なので、面接とか自己PRのお話は
あんまりしないんですけど

短所を面接で話すときは

どのように改善しようとしてる、とか
こういうことにいきることがある、とか
そういうのがあったほうがいいです。笑



ーーーーーーーー時は就活初期ーーーーーーーー

面接官「長所と短所を教えてください。」
僕「長所は〇〇で〜短所は後始末が悪いところです!!」
面接官「・・・・・・後始末悪いのどうするんですか?笑」
僕「あ、頑張ってなおそうとしtm・・・」

みたいにならないように!!笑

未来

就職後のことを考えるんだから必須ですね。
今まで自分を振り返って来たことを踏まえて、未来の自分がどうありたいかを考えてください。


仕事はもちろんですけど、


どこで暮らしたいか


どんな生活をしたいか

自己分析の後に

自己PRを書いてみてください。

過去に自分の強みが〇〇で役に立ちました、とかいうエピソード
現在自分は〇〇しています、〇〇に自信あります
これらを活かして自分は〇〇なことをしたいです。

自己分析やった後に書くと書きやすいんじゃないかなって思います。

最後に

あんまブログとか書かないんでダラダラした内容になっちゃいました笑
技術ネタ書けるレベルになれたらいいなぁーとか思ってます。