OpenCV を用いた USB カメラの画像表示
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
