OpenCV 错误:使用 fitLine 时断言失败

Posted

技术标签:

【中文标题】OpenCV 错误:使用 fitLine 时断言失败【英文标题】:OpenCV Error : Assertion failed when using fitLine 【发布时间】:2016-03-03 18:22:44 【问题描述】:

我想使用fitLine 函数在我的源图像src_crop 上画一条线。我在我的main() 中加载框架并调用drawLine()。 但是代码中止并出现以下错误:

代码:

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <stdio.h>

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace std;
using namespace cv;

/// Global variables

Mat src_gray;
Mat src_crop;
Mat dst, detected_edges;

int edgeThresh = 1;
int lowThreshold = 27;
int const max_lowThreshold = 100;
int ratio = 3;
int kernel_size = 3;
char* window_name = "Edge Map";
int i,j;

void drawLine(int, void*)

   vector<Vec4f> outline;
   vector<Point2f> ssline;

   int flag2 = 0;


   /// Reduce noise with a kernel 3x3
   blur(src_gray, detected_edges, Size(3, 3));



   /// Canny detector
   Canny(detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size);

  /// Using Canny's output as a mask, we display our result
  dst.create(detected_edges.size(), detected_edges.type());
  dst = Scalar::all(0);
  src_crop.copyTo(dst, detected_edges);
  //namedWindow("Detected Edges", CV_WINDOW_AUTOSIZE);
  //imshow("Detected Edges", detected_edges);


  cvtColor(dst, dst, CV_BGR2GRAY);


for (j = 0; j < dst.cols; j++)

    for (i = 0; i < dst.rows; i++)
    

        if (Scalar(dst.at<uchar>(i,j)).val[0] >= 90)
        
            //cout << "Hi";
            flag2 = 1;
            break;
        

    
    if (flag2 == 1)
        break;

int k = j;
int l = i;


for (j = k; j < dst.cols; j++)
 

    Point2f ss = Point2f(l,j);
    ssline.push_back(ss);



fitLine(ssline, outline, CV_DIST_L1, 0, 0.01, 0.01);

//imshow("Result", src_crop);




int main(int argc, char** argv)


    /// Load an image
    src = imread(s);


    if (!src.data)
    
        return -1;
    

    /// Create a matrix of the same type and size as src (for dst)
    //dst.create(src.size(), src.type());


    src_crop = src;
    /// Convert the image to grayscale
    cvtColor(src_crop, src_gray, CV_BGR2GRAY);


    /// Create a window
    namedWindow(window_name, CV_WINDOW_AUTOSIZE);

    /// Create a Trackbar for user to enter threshold
    createTrackbar("Min Threshold:", window_name, &lowThreshold, max_lowThreshold, drawLine);

    /// Show the image
    drawLine(0, 0);

    if (waitKey(30) >= 0) break;

    return 0;


代码在调用fitLine() 时停止工作。这是我通过使用 printf 语句测试代码发现的。

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

除了您的代码无法编译这一事实之外,问题在于您将参数outline 作为vector&lt;Vec4f&gt; 传递给fitLine,而它应该是Vec4f

outline 声明更改为:

Vec4f outline;

【讨论】:

以上是关于OpenCV 错误:使用 fitLine 时断言失败的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 错误:调用 detectMultiScale 时断言失败

java opencv错误内存不足和断言失败

使用 Contour Area-OpenCV 时出现断言错误

OpenCV - Mat::convertTo() 断言错误。

OpenCV 断言错误 mat.hpp 第 570 行

OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算