visual-c++ - opencv从网络摄像头捕获图像,无需后期处理

标签 visual-c++ opencv image-comparison

我想从网络摄像头捕获图像而无需任何后期处理,即自动对焦,曝光校正,白平衡和其他东西。好吧,基本上我想从网络摄像头捕获连续的帧,并使每个帧与上一个帧进行比较,然后仅在实际更改时才将它们保存到磁盘。由于进行了后期处理,因此几乎每一个帧对于我来说都是不同的。

到目前为止的代码

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;
}

当您这样做时,如果您也可以使用另一种框架比较解决方案为此提出建议的解决方法,我将非常满意:)

最佳答案

幸运的是,您可以获取相机的属性页,然后在此处关闭设备:

VideoCapture cap(0);
cap.set(CV_CAP_PROP_SETTINGS,1);

并请跳过c-api,改用c++。它将很快消失。

忘了提一下:您也从vlc更改了凸轮设置。

关于visual-c++ - opencv从网络摄像头捕获图像,无需后期处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17993677/

相关文章:

visual-c++ - 哪个类型库托管 stdDataFormat?

c++ - 如何在 OpenCV 中找到 x 和 y 梯度?

Tiny C编译器可以用于OpenCV代码编译吗?

Python手写文本提取

python - 在 Python 中比较图像

c++ - 我使用三种内存清除变体。他们都安全吗?我可以得到内存泄漏吗?

c++ - 无法在 Windows 7 机器上的 Microsoft Visual C++ 2010 中运行 OpenCV

c++ - Visual C++ 可再发行再发行

machine-learning - 如何使用数据科学/计算机视觉检测和分类图像中的 Material ?

node.js - 如何使用 Node.js 比较两个图像