如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?

Posted

技术标签:

【中文标题】如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?【英文标题】:How to change this C++ (OpenCV) code so it takes an image instead of a video? 【发布时间】: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;

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenCV 中更改相机设置

如何将 opencv c++ 代码集成到使用 c# 以统一 3D 开发的移动应用程序中

使用Python,OpenCV获取更改像素,修改图像通道,剪裁ROI

C++ OpenCV 源代码

在 OpenCV 中 std::vector 而不是 cv::Mat 的 `type` 的解释是啥,我该如何更改它? (C++)

求C++调用opencv设置获取摄像头图像大小的方法