gpt4 book ai didi

python - 如何使用 OpenCV 扩大二值图像而不关闭孔洞

转载 作者:行者123 更新时间:2023-12-02 16:14:56 33 4
gpt4 key购买 nike

如何在不关闭循环中的孔的情况下对左侧的二值图像应用膨胀?我也对高效地完成这项工作感兴趣。

enter image description here

上下文:我需要训练 CNN 来读取手写数字。不管你相信与否,左边的图像应该是 9。由于数据集有很多这样写的 9,我可能有机会训练模型来识别它。不过,我确实需要应用一些扩张,以使数字厚度与输入预训练模型的数字厚度相似。我想如果我失去了循环中的洞,我就没有机会了。

最佳答案

您只需填充轮廓内的孔,将其反转,然后将其乘以膨胀图像: enter image description here

这是 opencv 代码(c++):

Mat img__ = imread("E:/1.jpg", 0);
Mat img1;

threshold(img__, img1, 0, 255, THRESH_OTSU); # you don't need this line, I used it because I read the image from my hard disk. You can comment this line

vector<vector<Point>> contours;
vector< Vec4i > hierarchy;

findContours(img1, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_NONE);

Mat tmp = Mat::zeros(img1.size(), CV_8U);

for (size_t i = 0; i < contours.size(); i++)
{
if (hierarchy[i][2] < 0) # this stands for the inner contours which surrounds the hole
drawContours(tmp, contours, i, Scalar(255, 255, 255), -1);
}
Mat img2;
dilate(img1, img2, Mat::ones(9, 9, CV_8U));

imshow("original", img1);
imshow("1", tmp);
imshow("3", img2);

tmp = 255 - tmp;

imshow("2", tmp);

tmp = tmp / 255;

multiply(tmp, img2, img2);

imshow("4", img2);

waitKey(0);

关于python - 如何使用 OpenCV 扩大二值图像而不关闭孔洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59792501/

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