c
1#include <stdio.h> 2#include <cv.h> 3#include <highgui.h> 4 5int main(int argc, char* argv[]) { 6int i; 7float *p; 8double w = 320, h = 240; 9IplImage *src_img = 0, *gray_img = 0; 10CvMemStorage *storage; 11CvSeq *circles = 0; 12CvCapture *capture = 0; 13 14capture = cvCaptureFromCAM (0); 15//capture = cvCaptureFromFile(argv[1]); 16 17cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, w); 18cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, h); 19cvNamedWindow ("circles", CV_WINDOW_AUTOSIZE); 20while(1) { 21src_img = cvQueryFrame (capture); 22CvSize sizeOfImage = cvGetSize(src_img); 23//IplImage *gray_img = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1); 24gray_img = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1); 25 26cvCvtColor(src_img, gray_img, CV_BGR2GRAY); 27//src_img_gray = cvQueryFrame (capture); 28 29cvSmooth (gray_img, gray_img, CV_GAUSSIAN, 11, 11, 0, 0); 30storage = cvCreateMemStorage (0); 31 32circles = cvHoughCircles (gray_img, storage, CV_HOUGH_GRADIENT, 331, 100, 20, 50, 10, MAX (gray_img->width, gray_img->height)); 34for (i = 0; i < circles->total; i++) { 35p = (float *) cvGetSeqElem (circles, i); 36cvCircle (src_img, cvPoint (cvRound (p[0]), cvRound (p[1])), 3, CV_RGB (0, 255, 0), -1, 8, 0); 37cvCircle (src_img, cvPoint (cvRound (p[0]), cvRound (p[1])), cvRound (p[2]), CV_RGB (255, 0, 0), 3, 8, 0); 38} 39 40cvShowImage ("circles", src_img); 41cvWaitKey (10); 42} 43cvDestroyWindow ("circles"); 44cvReleaseImage (&src_img); 45cvReleaseImage (&gray_img); 46cvReleaseMemStorage (&storage); 47return 0; 48}
このプログラムでカメラで円検出をしました。opencvのCaptureFromFileという関数でカメラの部分をデスクトップにある動画に変えたいのですが、どうすればいいでしょうか
コードはバッククオート三つ(```)で括ってください。よくわからないようであれば、マークダウン記法について少し調べてみてください。
回答3件
あなたの回答
tips
プレビュー