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

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

社会人1年目でなんやかんや.

はじめに

こんにちは.よりです.
超久々の更新で感慨深いですね.

実はこのブログ,OpenCVの記事が意外とアクセス多くて1日に100アクセスとかあったりするんです.
嬉しいですね.

この記事はKogakuin Univ Advent Calendar 2017 7日目の記事です.
adventar.org

まぁめっちゃ自分語りになりそうなタイトルですよね.
本当はO/R マッパーについての記事とか書こうと思ったんですけど,
大学生にとっては社会人1年目の感想とかのが需要あるかなって.

それでは本題

この記事を読んでるのは大学生(工学院生)が多いんですかね?
そう思って書きます.
もし去年までの僕のことが気になったら過去の記事みてください.
恥ずかしいことたくさん書いてあるんで.

4月から6月

まず僕が入社したのはIT企業です.
でも文系の人もたくさんいました.

入社した会社は研修が手厚く,入社してすぐ3ヶ月間も研修がありました.
もうほぼ学校ですよ.高校生みたいに毎日学校行くみたいな.
まぁ周りのIT企業に入社した人に聞くと結構あるみたいなんですけど.

この期間でプログラミング初心者でも頑張ればプログラミングかなりかけるようになると思います.
僕はとても勉強になりました.

一応少しプログラミングしたことがあったので研修ですごく苦労することはなかったです(プログラミングでは)

あと3ヶ月も研修があるもんだから同期ととても仲良くなりましたね.
最近は同期と遊んでばっかで楽しくてしゃーないです.
入社したら会社はビジネスライクな付き合いで・・・とか思わないで,
同期や先輩とも仲良くやっていこう!っていう気持ちの方が楽しいと思います.

7月から現在

とにかく開発をしています.
でもプログラミングするの楽しいなって思ってるんで苦じゃないですね.
納期に追われて,スケジュールに追われてってなってる時期もありましたが,
当時辛くても今は良かったなーって思ったり.
何かが完成すしてくのって楽しいですやっぱり.

何か問題があっても自分で調べながら解決していくっていうのが楽しい.
まぁ投げ出したかったり放棄したくなったりもしますけど笑

それと自分が作ったものがこれから使われるのかなーって思うと結構テンション上がりますね.

これから就職する人へ

お前まだ1年目だろとか,お前に何がわかるんだとか思いますよね笑
でも知りません.
とりあえず言いたいこと言っておきます.

楽しいようにしましょう!
なんでも楽しいって思えば意外と笑えて楽しかったりするんじゃないですかね.
去年の研究はめっちゃ辛かったけど今思えば真剣にあんなにできて楽しかったなーって思います.

今の開発もめっちゃ期限が迫ってて辛い時もあるけど
なんだかんだできた時はめっちゃ嬉しいし楽しいし.
1人で立ってガッツポーズとかしたりして笑

終わりに

他の人が技術系で一生懸命記事書いてるのにこんな自分語りみたいな記事でごめんなさい笑
気が向いたら真剣にO/Rマッパーの記事に差し替えるかもしれないです.

ま,酒飲んで酔っ払いながら書いてるから許してね!笑

大学生活を経て思うこと

こんにちはよりです.

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



僕が本当に良かったと思っていることは最後の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

なぜ初期化したのか

はい、これですね。


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

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

終わりに

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

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