是否可以将每个找到的闭合轮廓写入单独的图像文件中?
我有这样的代码:
//Finding contours
vector<vector<Point> > img_contours;
vector<Vec4i> hierarchy;
findContours( img0, img_contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, Point(0,0) );
//Drawing contours
Mat contours_closed = Mat::zeros( img0.size(), CV_8UC1 );
RNG rng(12345);
int counter_closed_contours = 0;
for (int i = 0; i < img_contours.size(); i++) {
double area = contourArea( img_contours[i] );
if (area > 2610 && hierarchy[i][2] < 0){
counter_closed_contours++;
//HERE I DON'T KNOW HOW TO CODE AND WHERE TO PUT IMWRITE
imwrite("Contour_" + std::to_string(counter_closed_contours) + ".jpg", img_contours[i] );
Scalar color = Scalar( rng.uniform(255, 255), rng.uniform(255, 255),rng.uniform(255, 255));
drawContours( contours_closed, img_contours, i, color, CV_FILLED );
}
};
代码本身工作正常,它找到封闭的轮廓并绘制它们。但由于我希望每个轮廓都在一个单独的文件中,我不知道在哪里使用imwrite以及是否可以在循环内获得轮廓轮廓,因为它看起来像drawContours一次返回轮廓图像
答案 0 :(得分:0)
在for
循环中,您必须执行两项重要操作:
cv::Mat
重置为cv::Scalar(0)
。cv::drawContours()
绘制轮廓。可以使用以下代码完成:
# Create a single channel image with black color.
cv::Mat contourMat = cv::Mat(img0.size(), CV_8UC1, cv::Scalar(0));
# Iterate over all the contours.
for (int i=0; i<contours.size(); i++) {
# Draw the given contour, on the black canvas.
drawContours(contourMat, img_contours, i, cv::Scalar(255), CV_FILLED );
cv::imwrite("Contour_" + std::to_string(counter_closed_contours) + ".jpg", contourMat);
# Reset the image again to black.
contourMat.setTo(cv::Scalar(0));
}