gpt4 book ai didi

c++ - 从轮廓绘制垫子?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:40:27 24 4
gpt4 key购买 nike

我使用 openCV 来识别轮廓。现在我想创建一个包含此轮廓的所有坐标的新二进制垫。

img

  1. 应用了 Canny 边缘检测
  2. 找到轮廓的(红色的是我想用的那个)
  3. 只是将轮廓内的坐标绘制到新垫子中

这是我目前得到的:

vector<cv::Point> contour; // red marked contour;
cv::Rect boundingBox = cv::boundingRect(contour);

Mat newMat;
vector<cv::Point> insideContour;
for (int i=0; i<contour.size(); i++) {
// get all coordinates inside of contour
// insideContour.push_back(?)
}

for (int y=0; y<boundingBox.height; y++) {
for (int x=0; x<boundingBox.width; x++) {
// newMat
}
}

任何关于如何继续的帮助将不胜感激,因为我绝对一无所知。

最佳答案

试试这个。为简单起见,cv::Point(250, 219) 是红色轮廓内的一个点,使用 Haar 找到边界框,它是现实中的中心。

cv::Mat image = imread("Smiley.jpg");
cv::Mat image2 = imread("Smiley2.jpg");

// subtract images and floodfill to prepare red mask
Mat red_contour, red_mask, maskMat, outputMat;
subtract(image2, image, red_contour);
threshold(red_contour, red_mask, 100, 255, THRESH_BINARY);
int filling = cv::floodFill(red_mask, cv::Point(250, 219), cv::Scalar(0, 0, 255), (cv::Rect*)0, cv::Scalar(), cv::Scalar(), 4);

//prepare a grey mask
cv::cvtColor(red_mask, maskMat, CV_BGR2GRAY);
threshold(maskMat, maskMat, 0, 255, THRESH_BINARY);

// use mask to crop original image
image.copyTo(outputMat, maskMat);


cv::namedWindow("Image");
cv::imshow("Image", outputMat);

cv::waitKey();

return 0;

关于c++ - 从轮廓绘制垫子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com