【问题标题】:How to change this C++ (OpenCV) code so it takes an image instead of a video?如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?
【发布时间】:2021-11-11 23:14:40
【问题描述】:

我是 C++ 新手,我正在尝试转换此代码,以便它可以拍摄图像而不是视频。 这是用于 OpenCV 的人脸检测。我可以弄清楚 Mat,我需要传递图像而不是视频,只是不知道该怎么做。任何帮助将不胜感激。

谢谢。

int main()
{
VideoCapture capture;
//open capture object at location zero (default location for webcam)

capture.open(0);

//set height and width of capture frame
capture.set(CV_CAP_PROP_FRAME_WIDTH,320);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);

Mat cameraFeed;

SkinDetector mySkinDetector;

Mat skinMat;

//start an infinite loop where webcam feed is copied to cameraFeed matrix
//all of our operations will be performed within this loop
while(1){

//store image to matrix
capture.read(cameraFeed);

//show the current image
imshow("Original Image",cameraFeed);

skinMat= mySkinDetector.getSkin(cameraFeed);

imshow("Skin Image",skinMat);

waitKey(30);
}
return 0;
}

【问题讨论】:

    标签: c++ opencv opencv3.0 face-recognition face-detection


    【解决方案1】:

    您必须更改整个代码。在此代码中,您使用 while 循环从视频中获取连续图像。使用单张图片作为

    Mat cameraFeed = imread("/path/to/image.jpg");
    imshow("Original Image",cameraFeed);
    
    Mat skinMat= mySkinDetector.getSkin(cameraFeed);
    imshow("Skin Image",skinMat);
    
    waitKey(30);
    

    【讨论】:

      【解决方案2】:

      我不确定您所说的“传递图像”是什么意思。 如果您不是从视频源读取,而是想从磁盘上的文件读取,请删除以下代码:

      VideoCapture capture;
      //open capture object at location zero (default location for webcam)
      
      capture.open(0);
      
      //set height and width of capture frame
      capture.set(CV_CAP_PROP_FRAME_WIDTH,320);
      capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);
      

      并将 Mat cameraFeed 更改为:

      Mat cameraFeed = imread("/path/to/image.jpg");
      

      或者你可以创建一个函数并将你的图像传递给它。

      void detectSkin(Mat img)
      {
          SkinDetector mySkinDetector;
          Mat skinMat;
      
          //show the current image
          imshow("Original Image",img);
      
          skinMat= mySkinDetector.getSkin(img);
      
          imshow("Skin Image",skinMat);
      
          // Changed to 3000 milliseconds so you'll have time to see it.
          waitKey(3000);
      }
      
      int main()
      {
          Mat img = imread("myimage.jpg");
          detectSkin(img);
      
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        相关资源
        最近更新 更多