我想从网络摄像头捕获图像,无需任何后处理,即自动对焦,曝光校正,白平衡和东西。基本上,我想从网络摄像头捕捉连续的帧,并使每个帧与前一帧进行比较,并仅在存在实际更改时将其保存到磁盘。由于后处理几乎每一帧都被返回,因此对我来说不同。opencv从网络摄像头捕获图像,无需后处理
代码到目前为止
using namespace cv;
bool identical(cv::Mat m1, cv::Mat m2)
{
if (m1.cols != m2.cols || m1.rows != m2.rows || m1.channels() != m2.channels() || m1.type() != m2.type())
{
return false;
}
for (int i = 0; i < m1.rows; i++)
{
for (int j = 0; j < m1.cols; j++)
{
if ( m1.at<Vec3b>(i, j) != m2.at<Vec3b>(i, j))
{
return false;
}
}
}
return true;
}
int main() {
CvCapture* capture = cvCaptureFromCAM(1);
int i=0,firsttime=0;
char filename[40];
Mat img1,img2;
if (!capture) {
fprintf(stderr, "ERROR: capture is NULL \n");
getchar();
return -1;
}
cvNamedWindow("img1", CV_WINDOW_AUTOSIZE);
cvNamedWindow("img2", CV_WINDOW_AUTOSIZE);
while (1) {
IplImage* frame = cvQueryFrame(capture);
img1=frame;
if (!frame) {
fprintf(stderr, "ERROR: frame is null...\n");
getchar();
break;
}
if(firsttime==0){
img2=frame;
fprintf(stderr, "firtstime\n");
}
if ((cvWaitKey(10) & 255) == 27) break;
i++;
sprintf(filename, "D:\\testimg\\img%d.jpg", i);
cv::cvtColor(img1, img1, CV_BGR2GRAY);
imshow("img1", img1);
imshow("img2", img2);
imwrite(filename,img1);
if(identical(img1,img2))
{
//write to diff path
}
img2=imread(filename,1);
firsttime=1;
}
// Release the capture device housekeeping
cvReleaseCapture(&capture);
return 0;
}
尽管乌尔它,我将是伟大的充分,如果ü可以提出一个解决方法该使用其他框架藏汉比较的解决方案:)
哦酷TY :)。 。这是我的问题的答案:) –
但仍然比较仍然搞砸了。 。我猜想像素逐像素比较不会解决:P。 。 。有什么建议么? –