700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > opencv之膨胀 腐蚀

opencv之膨胀 腐蚀

时间:2022-07-02 17:20:20

相关推荐

opencv之膨胀 腐蚀

1 膨胀

功能

寻找图像中的局部极大值,将图像中的高亮区域进行扩张,运行出来的结果比原图的高亮区域更多。

参数

src: 输入矩阵kernel: 卷积核dts: 输出矩阵anchor: 卷积核矩阵的锚点, 默认将卷积核矩阵的中心点作为锚点iterations: 膨胀或腐蚀操作的迭代次数borderType: 边界扩充的模式, 默认不扩充borderValue: 当borderType=cv2.BORDER_CONSTANT时, 扩充边界的元素以borderValue填充

borderType

BorderTypes.Default=>不填充

BorderTypes.Constant=>填充边缘用指定的像素值(borderValue)

BorderTypes.Replicate=>填充边缘像素用已知的边缘像素值

BorderTypes.Wrap=>用另一边的像素来补偿填充

计算过程

类似于卷积处理,设定一个元素全为1的卷积核矩阵,卷积计算后,该像素点的值等于以该像素点为中心的卷积核矩阵范围内的最大值。如下图case1所示,红框为3*3的卷积核,膨胀操作就是将卷积核区域内的最大值赋给卷积核的中心点(8替换了1),

case1(默认无填充)

case2(使用常数填充)

python代码

from cv2 import BORDER_CONSTANT, MORPH_RECTimport numpy as npimport cv2x = np.array([[1, 2, 3, 4],[8, 7, 6, 5],[9, 10, 11, 12],[16, 15, 14, 13]], dtype=np.float64())kernel = cv2.getStructuringElement(MORPH_RECT, (3,3))# case1y1 = cv2.dilate(x, kernel, iterations=1)print(y1)# 打印结果'''[[ 8. 8. 7. 6.][10. 11. 12. 12.][16. 16. 15. 14.][16. 16. 15. 14.]]'''# 把borderType设置为BorderTypes.Constant, borderValue设为100# case2y2 = cv2.dilate(x, kernel, iterations=1, borderType=BORDER_CONSTANT, borderValue=100)print(y2)# 打印结果'''[[100. 100. 100. 100.][100. 11. 12. 100.][100. 16. 15. 100.][100. 100. 100. 100.]]'''

c++代码

#include <iostream>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;int main(){Mat src = imread("D:\\c++_opencv\\images\\0--Parade_0_Parade_marchingband_1_20.jpg", IMREAD_ANYCOLOR);imshow("input", src);Mat dst;Mat kernel = getStructuringElement(MORPH_RECT, Size(3,3));dilate(src, dst, kernel);imshow("output", dst);waitKey(0);destroyAllWindows();return 0;}

2 腐蚀

功能

寻找图像中的局部极小值,将图像中的高亮区域进行缩减,运行出来的结果比原图的高亮区域更少。

计算过程

类似于卷积处理,设定一个元素全为1的卷积核矩阵,卷积计算后,该像素点的值等于以该像素点为中心的卷积核矩阵范围内的最小值。如下图所示,红框为3*3的卷积核,膨胀操作就是将卷积核区域内的最小值赋给卷积核的中心点(11替换了13),

python代码

from cv2 import BORDER_CONSTANT, MORPH_RECTimport numpy as npimport cv2x = np.array([[1, 2, 3, 4],[8, 7, 6, 5],[9, 10, 11, 12],[16, 15, 14, 13]], dtype=np.float64())kernel = cv2.getStructuringElement(MORPH_RECT, (3,3))y1 = cv2.erode(x, kernel, iterations=1)print(y1)# 打印结果'''[[ 1. 1. 2. 3.][ 1. 1. 2. 3.][ 7. 6. 5. 5.][ 9. 9. 10. 11.]]'''

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
OpenCV——膨胀与腐蚀

OpenCV——膨胀与腐蚀

2021-05-17

OpenCV 腐蚀和膨胀

OpenCV 腐蚀和膨胀

2023-09-12

OpenCV:腐蚀 膨胀

OpenCV:腐蚀 膨胀

2023-02-05

opencv膨胀腐蚀

opencv膨胀腐蚀

2019-07-17