#include <iostream>
// cv support
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
int _threshold = 180;
int main(int argc, char** argv){
cv::Mat isrc = cv::imread("object.png");
cv::Mat igray;
cv::Mat ithreshold;
cv::Mat icontour;
cv::cvtColor(isrc, igray, CV_BGR2GRAY);
cv::threshold(igray, ithreshold, _threshold, 255, cv::THRESH_BINARY_INV);
// segment by contour
std::vector<std::vector<cv::Point>> contours;
cv::findContours(ithreshold, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0,0));
// check, have a segment ?
if(contours.size()){
for(int i=0;i<(int)contours.size();i++){
for(int j=0;j<(int)contours[i].size();j++){
cv::circle(isrc, contours[i][j], 5, Scalar(0,0,255));}
}
}
cv::imshow("source" , isrc);
cv::imshow("gray", igray);
cv::imshow("threshold", ithreshold);
cv::waitKey(0);
return 0;
}
Результат этого кода на картинке. Я должен сегментировать круг и пятиугольник. и обрезать его с прямоугольником.
У меня 2 вопроса
1) Как мне найти максимальный контур?
2) Как можно обрезать черным прямоугольником изображение с максимальным контуром для этого кода?
С наилучшими пожеланиями
Chairat
Вы можете проверить contourArea () найти самое большое, затем возьмите boundingRect, и обрезать его
Rect br = boundingRect(countours[i]);
Mat cropped = Mat( isrc, br );
Других решений пока нет …