opencv6
1.闭运算
(先膨胀,后腐蚀),关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接
import cv2
import numpy as np
o = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0228.JPG",
cv2.IMREAD_UNCHANGED)
kernel = np.ones((10, 10), np.uint8)
dilation = cv2.morphologyEx(o,cv2.MORPH_CLOSE,kernel,iterations=3)
cv2.imshow("o", o)
cv2.imshow("d", dilation)
cv2.waitKey()
cv2.destroyAllWindows()
2.梯度运算
(获得原始图像的边缘)
import cv2
import numpy as np
o = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0228.JPG",
cv2.IMREAD_UNCHANGED)
k = np.ones((5, 5), np.uint8)
r = cv2.morphologyEx(o, cv2.MORPH_GRADIENT, k)
cv2.imshow("o", o)
cv2.imshow("r", r)
cv2.waitKey()
cv2.destroyAllWindows()
3.礼帽运算
(获取图片的噪声信息,或者得到比原始图像边缘更亮的边缘信息)
import cv2
import numpy as np
o = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0228.JPG",
cv2.IMREAD_UNCHANGED)
k = np.ones((5, 5), np.uint8)
r = cv2.morphologyEx(o, cv2.MORPH_TOPHAT, k)
cv2.imshow("o", o)
cv2.imshow("r", r)
cv2.waitKey()
cv2.destroyAllWindows()
4.黑帽运算
(获取图像内部的小孔,或者前景色中的小黑点,或者得到比原始图像边缘更暗的边缘部分)
import cv2
import numpy as np
o = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0228.JPG",
cv2.IMREAD_UNCHANGED)
k = np.ones((5, 5), np.uint8)
r = cv2.morphologyEx(o, cv2.MORPH_BLACKHAT, k)
cv2.imshow("o", o)
cv2.imshow("r", r)
cv2.waitKey()
cv2.destroyAllWindows()
5.核函数
(用于返回一个用于形态学操作的指定大小和形状的结构元素)
import cv2
o = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0228.JPG",
cv2.IMREAD_UNCHANGED)
k1 = cv2.getStructuringElement(cv2.MORPH_RECT, (59, 59))
k2 = cv2.getStructuringElement(cv2.MORPH_CROSS, (59, 59))
k3 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (59, 59))
d1 = cv2.dilate(o, k1)
d2 = cv2.dilate(o, k2)
d3 = cv2.dilate(o, k3)
cv2.imshow("o", o)
cv2.imshow("d1", d1)
cv2.imshow("d2", d2)
cv2.imshow("d3", d3)
cv2.waitKey()
cv2.destroyAllWindows()
6.Sobel算子
一种离散的微分算子,该算子结合了高斯平滑和微分求导运算,该算子利用局部差分寻找边缘,计算所得的是一个梯度的近似值。
7.拷贝图像
image1.copy()
8.泛洪填充
def fill_binary():
image = np.zeros([400, 400, 3], np.uint8)
image[100:300, 100:300, :] = 255
cv2.imshow("fill_binary", image)
mask = np.ones([402, 402, 1], np.uint8)
mask[101:301, 101:301] = 0
cv2.floodFill(image, mask, (200, 200), (100, 2,255),cv2.FLOODFILL_MASK_ONLY)
cv2.imshow("filled binary", image)
9.边缘检测
cv2.canny()
获取边缘
10.图像金字塔
降低图像分辨率(高斯金字塔)
拉普拉斯金字塔,可以恢复分辨率