【opencv】dilate(膨胀)和erode(腐蚀)对圆形图像操作问题

dliate和erode实现

import cv2 as cv
import numpy as np
pie=cv.imread('d:/pic/pie.png')
kernel=np.ones((7,7),np.uint8)
dilate=cv.dilate(pie,kernel,iterations=10)
erosion=cv.erode(pie,kernel,iterations=10)
res=np.hstack((pie,dilate,erosion))
cv.imshow('res',res)
cv.waitKey(0)
cv.destroyAllWindows()

结果如下:
在这里插入图片描述

可以发现膨胀和腐蚀圆形已经变形,向着正方形发展了,原因是kernel的形状是正方形,所以算法在计算的时候会越来越像正方形,

解决办法:

将kernel的形状改成圆形;
import cv2 as cv
import numpy as np
import math

pie = cv.imread('0000.png')
kernel = np.ones((7, 7), np.uint8)
kernel_re = []
rows, cols = kernel.shape
for i in range(rows):
    result = [0 if math.sqrt((i-3)**2+(j-3)**2) > 3 else 1 for j in range(cols)]
    kernel_re.append(result)
kernel_re = np.array(kernel_re, np.uint8)
print(kernel_re, kernel)
print(type(kernel_re), type(kernel))
print(kernel_re.shape, kernel.shape)
dilate = cv.dilate(pie, kernel_re, iterations=10)
erosion = cv.erode(pie, kernel_re, iterations=10)
res = np.hstack((pie, dilate, erosion))
cv.imshow('res', res)
cv.waitKey(0)
cv.destroyAllWindows()

结果如下:
在这里插入图片描述
可以看到结果没有那么圆,这个是因为kernel的形状不是标准圆造成的,但是已经对之前的结果有了相对明显的改善;

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用 OpenCV 在 Visual Studio 中实现图像膨胀腐蚀处理,需要按照以下步骤进行操作: 1. 下载和安装 OpenCV 库:您可以从官方网站下载 OpenCV 库并按照官方文档中的说明进行安装。 2. 创建一个新的 Visual Studio 项目并将其配置为使用 OpenCV 库:您需要在项目属性中添加包含和库目录,并在链接器中添加所需的库文件。 3. 在代码中包含 OpenCV 库文件:您需要在代码中添加包含 OpenCV 库文件的头文件。 4. 加载图像并创建一个核:您需要使用 OpenCV 中的“imread”函数加载图像,并创建一个核来进行膨胀腐蚀处理。 5. 膨胀腐蚀处理:您需要使用 OpenCV 中的“dilate”和“erode”函数来进行膨胀腐蚀处理。这些函数需要传递图像和核作为参数,以及一些其他的可选参数,例如膨胀腐蚀的次数。 以下是一个使用 OpenCV 在 Visual Studio 中进行图像膨胀腐蚀处理的示例代码: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { // 加载图像 Mat image = imread("image.jpg", IMREAD_GRAYSCALE); // 创建一个核 Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5)); // 膨胀处理 Mat dilated_image; dilate(image, dilated_image, kernel, Point(-1, -1), 1); // 腐蚀处理 Mat eroded_image; erode(image, eroded_image, kernel, Point(-1, -1), 1); // 显示原图和处理后的图像 imshow("Original Image", image); imshow("Dilated Image", dilated_image); imshow("Eroded Image", eroded_image); waitKey(0); return 0; } ``` 注意,此示例代码假定您已将 OpenCV 库正确地配置为 Visual Studio 项目,并且已将“image.jpg”文件放置在可执行文件所在的目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值