簡體   English   中英

錯誤消息:無法匹配調用&#39;(cv :: Rect)(cv :: Mat&,cv :: Point_ <int> ,cv :: Point,cv :: Scalar,int)&#39;

[英]error message : no match for call to ‘(cv::Rect) (cv::Mat&, cv::Point_<int>, cv::Point, cv::Scalar, int)’

我到處都看了很多,找不到問題的答案。 我嘗試從這個線程( Extracting text 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);
    }

您將其中一個定義為:

Rect rectangle = boundingRect(contours[i]);

名稱矩形rectangle繪圖功能碰撞。 所以要么:

  1. 用另一個名稱重命名矩形 ,例如Rectangle rect = boundingRect(contours[i]);

  2. 調用矩形繪制方法為cv::rectangle(input,rectangle.tl(),rectangle.br(),Scalar(0,255,0),2);

你有

Rect rectangle = boundingRect(contours[i]);

其創建類型的變量Rect命名rectangle 然后在你的for循環中,你調用我假設的是rectangle()函數

rectangle(input,rectangle.tl(),rectangle.br(),Scalar(0,255,0),2);

在進行調用的范圍內,編譯器將rectangle視為變量而不是函數。 要解決此問題,您需要使用cv::限定rectangle ,或者您可以更改變量的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM