#author("2025-05-20T14:35:38+09:00","","") #author("2025-05-22T13:41:59+09:00","","") *VSCodeでC言語をつかう [#keff0b76] **ファイルの保存 [#g80b5f67] ワークスペースのフォルダーに~ ファイル名.c で保存する。 **プログラムのコンパイル [#l07990e2] 実行時は~ cvgcc ファイル名.c でコンパイルする。 **プログラムの実行 [#kcd56139] 実行は~ ./a.out で行う。 *C言語で画像を読み込み、表示するプログラム [#u1a40249] #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; } で画像を読み込むこみ表示ができる。ただし、同じフォルダーに読み込ませる画像があること。 *C言語で画像に線を引く [#wa676920] 基本的には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という値になっている。 *C言語で画素値の表示をする。 [#cef12574] 画素値を表示するプログラムでは、ポインタを利用することで画像にアクセスする。そうすることでメモリを直接書き換え、動作を早くする。 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]に値を代入するプログラムに変えれば、画素値の変更ができる。 *プログラムの時間を計測する [#w61e65fa] *C言語のプログラムの時間を計測する [#w61e65fa] time ./a.out で実行できる。 *pythonとc言語の比較 [#if9bec97] 一画素ごとにアクセスする場合はpythonのほうが10倍重い。~ そういう場合はc言語を使う。