OpenCV を用いて、USB カメラの画像をそのまま表示したり、グレースケール化して表示するプログラムの例
◆プログラムの例 (USB カメラの画像をそのまま表示)
#include<cv.h> #include<highgui.h> using namespace cv; int main (int argc, char **argv) { const double WIDTH = 640; // 幅 const double HEIGHT = 480; // 高さ const int CAMERANUM = 0; // カメラ番号 CvCapture *capture = NULL; IplImage *frame = 0; int ch; // カメラ接続、幅と高さの設定 capture = cvCreateCameraCapture(CAMERANUM); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, WIDTH); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, HEIGHT); namedWindow ("Capture", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); while (1) { frame = cvQueryFrame (capture); cvShowImage ("Capture", frame); ch = cvWaitKey ( 1 ); // 0 はディレイ時間 (ミリ秒単位) if (ch == '\x1b') { // ESC キー break; } } cvReleaseCapture (&capture); cvDestroyWindow ("Capture"); return 0; }
◆プログラムの例 (元画像とグレースケール化した画像を並べて表示)
#include<cv.h> #include<highgui.h> using namespace cv; int main (int argc, char **argv) { const double WIDTH = 640; // 幅 const double HEIGHT = 480; // 高さ const int CAMERANUM = 0; // カメラ番号 CvCapture *capture = NULL; IplImage *frame = 0; IplImage *gray = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); int ch; // カメラ接続、幅と高さの設定 capture = cvCreateCameraCapture(CAMERANUM); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, WIDTH); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, HEIGHT); namedWindow ("Capture", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); namedWindow ("GrayScale", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); while (1) { frame = cvQueryFrame (capture); cvShowImage ("Capture", frame); cvCvtColor(frame, gray, CV_BGR2GRAY); cvShowImage ("GrayScale", gray); ch = cvWaitKey ( 1 ); // 0 はディレイ時間 (ミリ秒単位) if (ch == '\x1b') { // ESC キー break; } } cvReleaseCapture (&capture); cvDestroyWindow ("Capture"); return 0; }
◆ Linux でのビルド手順例
g++ -o a.out hoge.cc -I/usr/local/include/opencv2 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_photo -lopencv_imgproc -lopencv_highgui -lopencv_core