错误消息:与调用"(cv::Rect) (cv::Mat&, cv::P oint_, cv:<int>:P oint, cv::Scalar, int)"的调用不匹配
error message : no match for call to ‘(cv::Rect) (cv::Mat&, cv::Point_<int>, cv::Point, cv::Scalar, int)’
我到处找了不少,找不到我问题的答案。我试图从这个线程复制一个文本检测软件(提取文本OpenCV)但是在代码的最后,有一个消息错误说没有匹配的矩形,即使我在上面画了一个,我们进入循环。我已经测试了所有我能想到的值,一切似乎都是正确的。
这里是完整的代码;
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
namedWindow("source_window2",WINDOW_AUTOSIZE);
namedWindow("source_window3",WINDOW_AUTOSIZE);
Mat input = imread(argv[1], CV_LOAD_IMAGE_COLOR);
Mat in_gray = imread(argv[1],CV_LOAD_IMAGE_GRAYSCALE);
Mat gradient;
Mat Kernelellipse = getStructuringElement(MORPH_ELLIPSE, Size(3,3));
morphologyEx(in_gray, gradient, MORPH_GRADIENT, Kernelellipse);
Mat thresh;
//on convertit en binaire
threshold(gradient, thresh, 0.0, 255.0, THRESH_BINARY | THRESH_OTSU);
rectangle(input,Point(0,0),Point(50,50),Scalar(255,255,255),2);
Mat Kernelrectangle = getStructuringElement(MORPH_RECT, Size(9,1));
Mat fermee;
morphologyEx(thresh, fermee, MORPH_CLOSE, Kernelrectangle);
imshow("source_window3", fermee);
Mat noire = Mat::zeros(thresh.size(), CV_8UC1);
//on cheche les contours
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(fermee, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
for (int i = 0; i < contours.size(); ++i)
{
Rect rectangle = boundingRect(contours[i]);
Mat noirerectangle(noire, rectangle);
noirerectangle = Scalar(0, 0, 0);
//on les dessine
drawContours(noire, contours, i, Scalar(255, 255, 255), CV_FILLED);
double proportion_de_blanc = (double)countNonZero(noirerectangle)/(rectangle.width*rectangle.height);
if (proportion_de_blanc > 0.45 && (rectangle.height > 8 && rectangle.width > 8))
{
rectangle(input,rectangle.tl(),rectangle.br(),Scalar(0,255,0),2);
}
}
imshow("source_window2",input);
waitKey(0);
return(0);
}
我的问题是在最后一个循环:
if (proportion_de_blanc > 0.45 && (rectangle.height > 8 && rectangle.width > 8))
{
rectangle(input,rectangle.tl(),rectangle.br(),Scalar(0,255,0),2);
}
您定义了一个rects为:
Rect rectangle = boundingRect(contours[i]);
名称矩形与rectangle
绘图功能冲突。所以:
用另一个名称重命名矩形,如
Rectangle rect = boundingRect(contours[i]);
调用矩形绘制方法为
cv::rectangle(input,rectangle.tl(),rectangle.br(),Scalar(0,255,0),2);
你有
Rect rectangle = boundingRect(contours[i]);
创建了一个名为rectangle
的Rect
类型变量。然后在for循环中调用rectangle()
函数
rectangle(input,rectangle.tl(),rectangle.br(),Scalar(0,255,0),2);
在该调用的作用域中,编译器将rectangle
视为变量而不是函数。要解决这个问题,您需要用cv::
限定rectangle
,或者您可以更改变量的名称。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 调用 cv::stereoBM 构造函数时出错
- cv::Mat 内存即使在调用 release() 后也没有释放?
- 逐行填充 cv::mat 调用函数
- OpenCV:错误:与调用'(cv::Mat) (int&, int&)'不匹配
- 使用 cv::waitKey,而不必先调用 cv::namedWindow 或 cv::imshow
- 从 Python 调用 C++ opencv 函数(发送一个 cv :: mat 到 C++ 使用 opencv 的 d
- 如何在OpenCV中调用cv::updateMotionHistory()
- 重载的调用"Point_(cv::P oint2f&)"是不明确的
- Boost/OpenCV 错误:与调用 '(boost::_mfi::d m<void(cv::Mat*, cv::VideoCapture*), Recorder>)
- 我如何调用line或cv::line与OpenCV 3.1
- 错误消息:与调用"(cv::Rect) (cv::Mat&, cv::P oint_, cv:<int>:P oint, cv::Scalar, int)"的调用不匹配
- 如何使用cv-qualifier调用重载成员函数