关于opencv当中一些图像运算的函数

    1. import cv2 as cv
    2. import numpy as np
    3. from matplotlib import pyplot as plt
    4. def qingshi():
    5. # 读取图片
    6. img = cv.imread("images/j.png")
    7. plt.subplot(121)
    8. plt.imshow(img)
    9. # np.ones()也就是一个N维数租 那么在这个数组当中全都是1
    10. # 如果在这个内核范围内都是1的话 那么就都是1 否则的话 会把这个1变成0
    11. # 原始图像中的一个像素(无论是1还是0)只有当内核下的所有像素都是1时才被认为是1,否则它就会被侵蚀(变成0)
    12. kernel = np.ones((5, 5), np.uint8)
    13. # 第一个参数为源地址 第二个为运算也可以不填写采用None代替
    14. # iteration的值越高,模糊程度(腐蚀程度)就越高 呈正相关关系
    15. erosion = cv.erode(img, kernel, iterations=1)
    16. plt.subplot(122)
    17. plt.imshow(erosion)
    18. plt.show()
    19. # 扩张
    20. def openArea():
    21. # 读取图片
    22. img = cv.imread("images/j.png")
    23. kernel = np.ones((5, 5), np.uint8)
    24. # 如果内核返回当中有一个元素为1那么都是1
    25. # 所有他会把元素进行扩张 所以目标区域就增加了变大了
    26. dilation = cv.dilate(img, kernel, iterations=1)
    27. cv.imshow("test", dilation)
    28. cv.waitKey(0)
    29. cv.destroyAllWindows()
    30. # 开运算
    31. def openMorph():
    32. img = cv.imread("images/j.png")
    33. plt.subplot(121)
    34. plt.imshow(img)
    35. kernel = np.ones((5, 5), np.uint8)
    36. # 开运算 侵蚀后扩张
    37. # opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
    38. # 闭运算 先扩张然后侵蚀
    39. # opening = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
    40. # 形态学梯度
    41. # opening = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)
    42. # 输入图像和图像闭运算之差 黑猫
    43. opening = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
    44. plt.subplot(122)
    45. plt.imshow(opening)
    46. plt.show()
    47. if __name__ == '__main__':
    48. # openArea()
    49. openMorph()