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<Vec4f>
传递给fitLine
,而它应该是Vec4f
。
将outline
声明更改为:
Vec4f outline;
【讨论】:
以上是关于OpenCV 错误:使用 fitLine 时断言失败的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 错误:调用 detectMultiScale 时断言失败
使用 Contour Area-OpenCV 时出现断言错误