我正试图从我的框架中获取轮廓,这就是我所做的:
cv::Mat frame,helpframe,yframe,frame32f;
Videocapture cap(1);
.......
while(waitkey()){
cv::Mat result = cv::Mat::zeros(height,width,CV_32FC3);
cap >> frame; // get a new frame from camera
frame.convertTo(frame32f,CV_32FC3);
for ( int w = 0; w< 10;w ++){
result += frame32f;
}
//Average the frame values.
result *= (1.0/10);
result /= 255.0f;
cvtColor(result,yframe,CV_RGB2YCrCb); // converting to Ycbcr///// the code work fine when I use frame instead of result
extractChannel(yframe,helpframe,0); //extracting the Y channel
cv::minMaxLoc(helpframe,&minValue,&maxValue,&min,&max);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(helpframe, contours,CV_RETR_LIST /*CV_RETR_EXTERNAL*/, CV_CHAIN_APPROX_SIMPLE);
............................................... .....
该程序在findcontours
崩溃,我在debbug收到此错误消息:
OpenCV错误:不支持的格式或格式组合([Start] FindContours 仅支持8uC1和32sC1图像)未知功能,文件...... \ src \ openc v \ modules \ imgproc \ src \ contours.cpp,第196行
@Niko感谢您的帮助我认为我必须将帮助框架转换为其他类型。
当我使用结果时,我会得到
helpframe.type()=&gt;五
并且框架我得到0
我不知道这是什么意思?但我会试着找到一种转换帮助框架的方法。
: helpframe.convertTo(helpframe2,CV_8U)
我什么都得不到helpframe2 = 0?当我尝试使用框架而不是结果框架时,转换工作?
任何想法我应该如何更改帮助框架类型,因为我使用结果而不是框架?
答案 0 :(得分:7)
在识别轮廓之前,您需要将图像缩小为二进制图像。这可以通过例如应用某种边缘检测算法或通过简单的阈值处理来完成:
// Binarize the image
cv::threshold(helpframe, helpframe, 50, 255, CV_THRESH_BINARY);
// Convert from 32F to 8U
cv::Mat helpframe2;
helpframe.convertTo(helpframe2, CV_8U);
cv::findContours(helpframe2, ...);