gpt4 book ai didi

c++ - 如何使用 opencv 和 c++ 从网络摄像头帧中查找轮廓?

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:53 24 4
gpt4 key购买 nike

我的目标是通过从网络摄像头捕获帧来找到轮廓。我能够使用静态图像来做到这一点,但后来我尝试在网络摄像头框架中使用相同的概念,但它给了我这个错误:

"OpenCV Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN
(type0) && ((1 << type0) & fixedDepthMask) != 0)) in cv::_OutputArray::create, f
ile C:\builds\2_4_PackSlave-win64-vc11-shared\opencv\modules\core\src\matrix.cpp
, line 1486"

这是我用来在程序中查找轮廓的代码;

 Rng rng(12345);

Mat captureframe,con,threshold_output;

vector<vector<Point> > contours; //
vector<Vec4i> hierarchy;

while(true)
{
capturedevice>>captureframe;
con = captureframe.clone();
cvtColor(captureframe,con,CV_BGR2GRAY);

threshold( con, threshold_output, thresh, 255, THRESH_BINARY );
findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

Mat drawing = Mat::zeros( threshold_output.size(), CV_8UC3 );

for( int i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );

drawContours( drawing, contours, i, color, 1, 8, vector<Vec4i>(), 0, Point() );
}


imshow("contour drawing",drawing);
}

最佳答案

我认为问题出在以下两行:

con = captureframe.clone();
cvtColor(captureframe,con,CV_BGR2GRAY);

第一行中,您将 con 作为 captureFrame 的克隆,这意味着 con < strong>是一个 3 channel 图像,在第二行中,您试图使 con 成为一个 1 channel 灰度图像因此,您会遇到与图像类型相关的错误。

您应该尝试执行以下操作(我不确定您的代码是否会在此之后运行,但在此之后您不应该得到当前错误):

con.create(captureframe.rows , captureframe.cols, CV_8UC1);
cvtColor(captureframe,con,CV_BGR2GRAY);

关于c++ - 如何使用 opencv 和 c++ 从网络摄像头帧中查找轮廓?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25342333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com