如何更改此 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 c++ 代码集成到使用 c# 以统一 3D 开发的移动应用程序中
使用Python,OpenCV获取更改像素,修改图像通道,剪裁ROI
在 OpenCV 中 std::vector 而不是 cv::Mat 的 `type` 的解释是啥,我该如何更改它? (C++)