Begrenzungsrahmen für Konturen erstellenC++

Programme in C++. Entwicklerforum
Anonymous
 Begrenzungsrahmen für Konturen erstellen

Post by Anonymous »

Ich habe diesen Code verwendet, um „Begrenzungsrahmen“ zu zeichnen. Jetzt möchte ich das größte Rechteck, obwohl es viele Rechtecke gibt. Nachdem ich das größte Rechteck gefunden habe, möchte ich die Koordinaten dieses Rechtecks ​​haben. Durch diese Koordinaten möchte ich Teil des Originalbildes sein. Das größte Rechteck ist mein Auto.

Code: Select all

#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;

Mat src; Mat src_gray;
int thresh = 0;
int max_thresh = 255;
RNG rng(12345);

/// Function header
void thresh_callback(int, void*);
/** @function thresh_callback */
void thresh_callback(int, void*)
{
Mat threshold_output;
vector contours;
vector hierarchy;

/// Detect edges using Threshold
threshold(src_gray, threshold_output, thresh, 255, THRESH_BINARY);
/// Find contours
findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

/// Approximate contours to polygons + get bounding rects and circles
vector contours_poly(contours.size());
vector boundRect(contours.size());
vectorcenter(contours.size());
vectorradius(contours.size());

for (int i = 0; i < contours.size(); i++)
{
approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);
boundRect[i] = boundingRect(Mat(contours_poly[i]));
minEnclosingCircle((Mat)contours_poly[i], center[i], radius[i]);
}

/// Draw polygonal contour + bonding rects + circles
Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
for (int i = 0; i< contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(drawing, contours_poly, i, color, 1, 8, vector(), 0, Point());
rectangle(drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0);
}

/// Show in a window
namedWindow("Contours", CV_WINDOW_AUTOSIZE);
imshow("Contours", drawing);
}
/** @function main */
int main(int argc, char** argv)
{
/// Load source image and convert it to gray
src = imread("RGB2YCrCb_BC_SB.png");
/// Convert image to gray and blur it
cvtColor(src, src_gray, CV_BGR2GRAY);
blur(src_gray, src_gray, Size(3, 3));
/// Create Window
char* source_window = "Source";
namedWindow(source_window, CV_WINDOW_AUTOSIZE);
imshow(source_window, src);

thresh_callback(0, 0);

waitKey(0);
return(0);
}
Ich habe hart gearbeitet und viel gesucht. Bitte helfen Sie, wenn Sie können.
Siehe das Bild.

Eingabebild:

Image


Das Ergebnis:

Image

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post