ワークスペースのフォルダーに
ファイル名.c
で保存する。
実行時は
cvgcc ファイル名.c
でコンパイルする。
実行は
./a.out
で行う。
#include<stdio.h> #include<opencv2/opencv.hpp>
int main(){
cv::Mat img;
img = cv::imread("ファイル名.jpeg");
cv::imshow("img", img);
cv::waitKey(0);
return 0;
}
で画像を読み込むこみ表示ができる。ただし、同じフォルダーに読み込ませる画像があること。
基本的にはpythonと同じであるが、複数の値を順序付けられたコレクションとしてまとめて扱うためのデータ型である(taple)がc言語では使えない。
なので、c言語ではpointとscalarを使う。
例:cv::line( img, cv::Point(0,0), cv::Point(50,30),cv::Scalar(255,0,0), 2, cv::LINE_AA );
pythotと同じで()の中身は
cv::line(入力画像データ,線の視点の座標,先の終点の座標,線の色,線の太さ,線の種類);
となっている。
また、画像が白黒の場合はscalarは使わずに値だけで良い。
例:cv::line( img, cv::Point(0,0), cv::Point(50,30),128, 2, cv::LINE_AA );
このように、色指定の部分が128という値になっている。
画素値を表示するプログラムでは、ポインタを利用することで画像にアクセスする。そうすることでメモリを直接書き換え、動作を早くする。
uchar *p = img.ptr<uchar>(y);
こうすれば画像の座標(0,y)のアドレスを取得できる。
あとは
for ( int x = 0; x<100; x++){
printf("%d ", p[x]);
}
で表示すれば良い。
printf("%d ", p[x])をp[x]に値を代入するプログラムに変えれば、画素値の変更ができる。
time ./a.out
で実行できる。
一画素ごとにアクセスする場合はpythonのほうが10倍重い。
そういう場合はc言語を使う。