int w,h,key;
CvCapture *cam=cvCreateCameraCapture(CV_CAP_ANY); //カメラ初期化
if (!cam){
printf("カメラが見つかりません.\n");
return 1;
}
//カメラ用のウィンドウ
char *winc="Camera";
char *win1="Image1";
char *win2="Image2";
cvNamedWindow(winc,CV_WINDOW_AUTOSIZE); //カメラ ウィンドウ作成
cvMoveWindow(winc,0,0);
cvNamedWindow(win1,CV_WINDOW_AUTOSIZE); //グレイ ウィンドウ作成
cvMoveWindow(win1,800,0);
cvNamedWindow(win2,CV_WINDOW_AUTOSIZE); //モノクロ ウィンドウ作成
cvMoveWindow(win2,800,550);
// 直接画像サイズを指定する
cvSetCaptureProperty (cam, CV_CAP_PROP_FRAME_WIDTH, 640);
cvSetCaptureProperty (cam, CV_CAP_PROP_FRAME_HEIGHT, 480);
CvSize imageSize = cvSize(640,480);
IplImage* cam_img = cvCreateImage(imageSize, IPL_DEPTH_8U,3);
IplImage* gray_img = cvCreateImage(imageSize, IPL_DEPTH_8U,1); // グレースケール画像用にメモリを確保
IplImage* wb_img = cvCreateImage(imageSize, IPL_DEPTH_8U,1); // モノクロ用にメモリ確保
while(1){
key=cvWaitKey(1);
if (key==0x1B) break; //ESCキーで終了
cam_img=cvQueryFrame(cam); //カメラ画像の取得
if (cam_img) {
cvCvtColor(cam_img, gray_img,CV_BGR2GRAY); //カラーからグレーへ変換
cvAdaptiveThreshold(gray_img, wb_img, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, 8);
cvShowImage(winc,cam_img); //カメラ画像の表示
cvShowImage(win1,gray_img); //処理した画像の表示
cvShowImage(win2,wb_img); //処理した画像の表示
}
}
//全てのウィンドウの削除
cvDestroyAllWindows();
//ウィンドウ関連解放処理
cvDestroyWindow(winc);
cvDestroyWindow(win1);
cvDestroyWindow(win2);
//カメラの開放
cvReleaseCapture(&cam);
//画像データの解放
cvReleaseImage(&gray_img);
cvReleaseImage(&wb_img);
return 0; |
int c;
IplImage* cam_img;
cv::Mat mat_frame;
cv::Mat mat_gray;
cv::Mat mat_wb;
//カメラの初期化(カメラの選択)
CvCapture *capture = cvCaptureFromCAM(0);
if (!capture){
printf("カメラが見つかりません.\n");
return 1;
}
//取込サイズの設定
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, 640);
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, 480);
CvSize imageSize = cvSize(640,480);
//カメラ用のウィンドウ
char *winc="Camera";
char *win1="Image1";
char *win2="Image2";
//ウィンドウの作成
cvNamedWindow (winc, CV_WINDOW_AUTOSIZE);
cvMoveWindow(winc,0,0);
cvNamedWindow(win1,CV_WINDOW_AUTOSIZE); //グレイ ウィンドウ作成
cvMoveWindow(win1,800,0);
cvNamedWindow(win2,CV_WINDOW_AUTOSIZE); //モノクロ ウィンドウ作成
cvMoveWindow(win2,800,550);
while (1) {
//カメラ画像の取込
cam_img = cvQueryFrame (capture);
if (cam_img) {
mat_frame = cv::Mat(cam_img,true); // カメラ画像 IplImage -> Mat変換
//カラーからグレーへ変換
cv::cvtColor(mat_frame, mat_gray, CV_BGR2GRAY);
// 白黒2値化
cv::adaptiveThreshold(mat_gray, mat_wb, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, 7, 8);
//画像の表示
cvShowImage (winc, cam_img);
cv::imshow(win1, mat_gray);
cv::imshow(win2, mat_wb);
}
//キー入力待ち(Escキーで終了)
c = cvWaitKey (2);
if (c == '\x1b') break;
}
//カメラの開放
cvReleaseCapture (&capture);
//全てのウィンドウの削除
cvDestroyAllWindows();
//ウィンドウ関連解放処理
cvDestroyWindow (winc);
cvDestroyWindow (win1);
cvDestroyWindow (win2);
return 0; |
CvCapture *cam1=cvCreateCameraCapture(0); //カメラ1初期化
if(!cam1){
printf("カメラ1が見つかりません.\n");
return 1;
}
CvCapture *cam2=cvCreateCameraCapture(1); //カメラ2初期化
if(!cam2){
printf("カメラ2が見つかりません.\n");
return 1;
}
//カメラ用のウィンドウ
char *winc1 ="Camera1"; //ウィンドウの名前
char *winc2 ="Camera2"; //ウィンドウの名前
cvNamedWindow(winc1,CV_WINDOW_AUTOSIZE); //カメラ1 ウィンドウ作成
cvMoveWindow(winc1,0,0);
cvNamedWindow(winc2,CV_WINDOW_AUTOSIZE); //カメラ2 ウィンドウ作成
cvMoveWindow(winc2,800,0);
IplImage *cam1_img=NULL;
cam1_img=cvQueryFrame(cam1); //カメラ画像取得1(サイズ取得のため)
IplImage *cam2_img=NULL;
cam2_img=cvQueryFrame(cam2); //カメラ画像取得2(サイズ取得のため)
while(1){
int key = cvWaitKey(1);
if (key == 0x1B) break; // ESCキーで終了
cam1_img=cvQueryFrame(cam1); //カメラ画像1の取得
cam2_img=cvQueryFrame(cam2); //カメラ画像2の取得
cvShowImage(winc1,cam1_img); //カメラ画像1の表示
cvShowImage(winc2,cam2_img); //カメラ画像2の表示
if (key == 's' ) { // sキーで画像保管
cvSaveImage("image/cam1img.bmp", cam1_img); // imageフォルダーが存在すること!
cvSaveImage("image/cam2img.bmp", cam2_img);
}
}
//全てのウィンドウの削除
cvDestroyAllWindows();
//ウィンドウ関連解放処理
cvDestroyWindow(winc1);
cvDestroyWindow(winc2);
//カメラの開放
cvReleaseCapture(&cam1);
cvReleaseCapture(&cam2);
return 0; |
int i,r,g,b,nWidth,nHeight,pixcel_count;
char szMsg[256]={""};
printf("*** START ***\n");
CvCapture *cam=cvCreateCameraCapture(CV_CAP_ANY); //カメラ初期化
if(!cam){
printf("カメラが見つかりません.\n");
return 1;
}
//カメラ用のウィンドウ
char *winc="Camera";
char *win1="Image1";
char *win2="Image2";
cvNamedWindow(winc,CV_WINDOW_AUTOSIZE); //カメラ ウィンドウ作成
cvMoveWindow(winc,0,0);
cvNamedWindow(win1,CV_WINDOW_AUTOSIZE); //グレイ ウィンドウ作成
cvMoveWindow(win1,800,0);
cvNamedWindow(win2,CV_WINDOW_AUTOSIZE); //モノクロ ウィンドウ作成
cvMoveWindow(win2,800,550);
IplImage *cam_img=NULL;
IplImage *bak_img=NULL;
cam_img = cvQueryFrame(cam); //カメラ画像取得(サイズ取得のため)
nWidth = cam_img->width;
nHeight = cam_img->height;
sprintf_s(szMsg, "w=%d h=%d\n", nWidth, nHeight);
printf(szMsg);
// グレースケール画像用にメモリを確保
IplImage* gray_img = cvCreateImage(cvGetSize(cam_img), IPL_DEPTH_8U,1);
// モノクロ用にメモリ確保
IplImage* wb_img = cvCreateImage(cvGetSize(cam_img), IPL_DEPTH_8U, 1);
// 結果用にメモリ確保
IplImage* result_img = cvCreateImage(cvGetSize(cam_img), IPL_DEPTH_8U, 3);
//検出色の定義 (各チャンネルの画素値の上限と下限を二次元配列に格納)
int iro[][2]= { {200,255}, // R
{ 0, 50}, // G
{ 0, 50} // B
};
// 画像データアクセス用のポインタ作成
unsigned char **image;
image = new unsigned char *[nHeight];
for(i=0; i<nHeight; i++) {
image[i] = (unsigned char *)cam_img->imageData + i*cam_img->widthStep;
}
// 結果アクセス用のポインタ作成
unsigned char **image2;
image2 = new unsigned char *[nHeight];
for(i=0; i<nHeight; i++) {
image2[i] = (unsigned char *)result_img->imageData + i*result_img->widthStep;
}
while(1){
int key=cvWaitKey(1);
if (key==0x1B) break; //ESCキーで終了
cam_img=cvQueryFrame(cam); //カメラ画像の取得
cvCvtColor(cam_img, gray_img,CV_BGR2GRAY); //カラーからグレーへ変換
// cvAdaptiveThreshold(gray_img, wb_img, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, 8);
pixcel_count = 0;
for( int y=0 ; y<nHeight; y++) {
for( int x=0; x<nWidth; x++) {
r = image[y][x*3+2]; // 座標(x,y)のR
g = image[y][x*3+1]; // 座標(x,y)のG
b = image[y][x*3]; // 座標(x,y)のB
if( ( iro[2][0] <= b) && ( b <=iro[2][1]) && // B
( iro[1][0] <= g) && ( g <=iro[1][1]) && // G
( iro[0][0] <= r) && ( r <=iro[0][1]) ) { // R
pixcel_count++;
image2[y][x*3+2] = 255;
image2[y][x*3+1] = 0;
image2[y][x*3] = 0;
}
else {
image2[y][x*3+2] = 0;
image2[y][x*3+1] = 0;
image2[y][x*3] = 0;
}
}
}
sprintf_s(szMsg, "count=%d\n", pixcel_count);
printf(szMsg);
cvShowImage(winc,cam_img); //カメラ画像の表示
cvShowImage(win1,gray_img); //処理した画像の表示
cvShowImage(win2,result_img); //処理した画像の表示
}
//全てのウィンドウの削除
cvDestroyAllWindows();
//ウィンドウ関連解放処理
cvDestroyWindow(winc);
cvDestroyWindow(win1);
cvDestroyWindow(win2);
//カメラの開放
cvReleaseCapture(&cam);
//画像データの解放
cvReleaseImage(&gray_img);
cvReleaseImage(&wb_img);
cvReleaseImage(&result_img);
// 画像データアクセスに使った配列を開放
delete [] image;
delete [] image2;
printf("*** END ***\n");
return 0;
|