OpenCVを用いたプログラミング
目標
- USBカメラから取り込んだ画像に対して、『濃淡化』、『二値化』、 『拡大縮小』、『画像の切り取り』を行い、それぞれ別のウィンドウに表示する。 sample.cppを参考にする。
- 画像ファイルを入力し、適当な画像処理を行ってファイルの出力を行う。
使用する主な関数
- USBカメラへのアクセス
- 画像の作成・解放
- cvCreateImage?
- cvCopyImage?
- cvCloneImage?
- cvReleaseImage?
IplImage *img1, *img2; //++ cam_imgにカメラ画像が入っているとする // cam_imgと同じサイズのメモリを確保する img1 = cvCreateImage(cvGetSize(cam_img), IPL_DEPTH_8U, cam_img->nChannels); // cam_imgの画像をコピー cvCopyImage(cam_img, img1); // 確保とコピーを同時に行う img2 = cvCloneImage(cam_img); //++ 適当な画像処理 // 解放(cam_imgは解放しない) cvReleaseImage(&img1); cvReleaseImage(&img2);
- 画像の表示
- 色変換
- cvCvtColor?
IplImage *img1, *img2; //++ cam_imgにカラーのカメラ画像が入っているとする // カラーのメモリ確保 img1 = cvCreateImage(cvGetSize(cam_img), IPL_DEPTH_8U, 3); // グレイスケールのメモリ確保 img2 = cvCreateImage(cvGetSize(cam_img), IPL_DEPTH_8U, 1); // cam_imgをimg1にコピー cvCopyImage(cam_img, img1); // カラーをグレイに変換 cvCvtColor(img1, img2, CV_RGB2GRAY); // 解放 cvReleaseImage(&img1); cvReleaseImage(&img2);
- cvCvtColor?
- 画像の切り取り
- cvSetImageROI
- cvResetImageROI
- img1の(x, y) = (100, 150)から(20, 30)だけ切り出したい場合
// 切り出すサイズのメモリを確保 IplImage img2 = cvCreateImage(cvSize(20, 30), IPL_DEPTH_8U, img1->nChannels); // img1に領域を指定後、コピーして領域をリセット cvSetImageROI(img1, cvRect(100, 150, 20, 30)); cvCopyImage(img1, img2); cvResetImageROI(img1);
注意事項