О сегментации в OPENCV

    #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

0

Решение

Вы можете проверить contourArea () найти самое большое, затем возьмите boundingRect, и обрезать его

Rect br = boundingRect(countours[i]);
Mat cropped = Mat( isrc, br );
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]