当前位置: 首页 > 知识库问答 >
问题:

cv::findcontours导致程序崩溃

陈琪
2023-03-14

我试图从我的框架中获得轮廓,这就是我所做的:

 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处崩溃,我收到以下错误消息:

OpenCV错误:不支持的格式或格式组合([开始]FindContour只支持8uC1和32sC1图像)在未知的功能,文件......\src\openc v\模块\imgproc\src\contours.cpp行196

@Niko谢谢你的帮助我想我必须把帮助框转换成另一种类型。当我使用我得到的结果作为帮助框架时。类型()=

使用:helpframe转换帮助框架后。convertTo(帮助框架2,CV_8U)

我没有得到任何帮助框架2=0??当我尝试使用相同的frame而不是resultframe时,转换工作正常??

知道我应该如何更改帮助框类型吗,因为我使用的是结果而不是框架?

共有1个答案

裴英锐
2023-03-14

在识别轮廓之前,您需要将图像还原为二进制图像。这可以通过,例如,应用某种边缘检测算法或通过简单的阈值来实现:

// 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, ...);
 类似资料:
  • 这里是Android开发者新手。我在MainActivity中使用recyclerview,应用程序不断崩溃。 任何帮助都将受到赞赏! 编辑:对不起,我是新来的。我已经附加了Logcat。和其他xml文件。谢谢 这是我的代码: 列出你的布局。xml: activity_main.xml: } ProductAdapter。java类: } Logcat: 致命异常:主进程:e.wolverine2

  • 我正在使用内置于Web View的Android开发浏览器。其中我面临的一个问题是,当我访问http://crashmybrowser.com测试浏览器上的选项卡崩溃时,我的整个浏览器应用程序都会崩溃。但是,当在chrome或Opera上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃是由于访问上述网站而预期的结果。有人能帮助理解我如何在使用Webview的浏览器上处理此崩

  • 问题内容: 我正在开发一个Android 3.1应用程序,该应用程序使用USB主机模式通过USB上的MIDI与我的键盘(Korg M3)进行通信。这是在装有Android 4.0.3的Xoom上运行的。我可以通过USB接收MIDI消息而没有任何问题,但是将音符数据发送回键盘的效果是好坏参半,延迟半秒钟后便会频繁崩溃。 这是我在点击操作栏上的按钮发送注释时不断遇到的错误: E / dalvikvm(

  • 问题内容: 我已经在我的应用中实现了GCM通知。我现在尝试在用户注销时注销该应用程序。我正在使用以下代码。执行此代码时,它将导致应用程序崩溃,并显示以下logcat: 这是代码: 问题答案: 将支持库更新为25.0.0后,我遇到了同样的问题。对我来说,更新下面的库之后,在应用程序gradle文件中,问题消失了。

  • 我试图用Java/LWJGL做一个简单的游戏。我在学习一个在windows上制作的教程,我用的是Mac。我复制了他的代码来打开一个窗口字符,程序立即崩溃了,给了我一个很长很奇怪的错误,可能与指针有关(我实际上不知道)。下面是用于创建窗口的行,我使用该窗口的属性中定义了宽度和高度: 当我在mac上运行它时,它会给我以下错误:

  • 当我初始化的元素应用程序崩溃,如果我不初始化任何元素的应用程序显示的布局只是罚款和做一些基本的功能,我已经添加了使用在XML的onClick属性的方法 我需要从EditText元素中提取数据来进行计算。 java代码: 坠机记录: 致命例外:主进程:com.ajaydubey.fifamobilebulktradeprofitcounter,PID:17627java.lang.运行时异常:无法启