这里写目录标题
读取图像
import cv2 as cv
img_data = cv.imread("../00000.jpg")
cv.imshow("img",img_data)
while True:
if ord('q') == cv.waitKey(0):
break
cv.destroyAllWindows()
图像灰度化
灰度是指只含亮度信息,不含色彩信息的图像。黑白照片就是灰度图,特点是亮度由暗到明,变化是连续的。要表示灰度图,就需要把亮度值进行量化
使用灰度图的好处:
① RGB的值都一样。
② 图像数据即调色板索引值,就是实际的RGB值,也就是亮度值。
③ 因为是256色调色板,所以图像数据中一个字节代表一个像素,很整齐。
所以,做图像处理时都采用灰度图
法1直接调用cv代码
img_data = cv.imread("../00000.jpg")
gray_data = cv.cvtColor(img_data,cv.COLOR_BGR2GRAY)
cv.imshow("img",gray_data)
法2 自己改造像素值
gray_data = cv.cvtColor(img_data,cv.COLOR_BGR2RGB)
row, col, channel = gray_data.shape
for i in range(row):
for j in range(col):
gray_data[i,j] = np.uint8(min(gray_data[i,j,0],gray_data[i,j,1],gray_data[i,j,1]))
cv.imshow("gray_data2",gray_data)
效果对比
图像二值化
什么叫图像的二值化?二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。
黑色:
二值化后的R = 0
二值化后的G = 0
二值化后的B = 0
白色:
二值化后的R = 255
二值化后的G = 255
二值化后的B = 255
那么一个像素点在灰度化之后的灰度值怎么转化为0或者255呢?比如灰度值为100,那么在二值化后到底是0还是255?这就涉及到取一个阀值的问题。
ret, th1 = cv.threshold(img_data,150,255,cv.THRESH_BINARY)
th2 = cv.adaptiveThreshold(img_data,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2)
th3 = cv.adaptiveThreshold(img_data,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,11,2)
图像降噪
; 均值滤波
img_data = cv.imread("../00000.jpg")
img_data = cv.cvtColor(img_data,cv.COLOR_BGR2RGB)
mean_img = cv.blur(img_data,(9,9))
mean_img2 = cv.blur(img_data,(19,19))
mean_img3 = cv.blur(img_data,(29,29))
cv.imshow("img",mean_img)
cv.imshow("img2",mean_img2)
cv.imshow("img3",mean_img3)
卷积核越大,越想越平滑(模糊)
高斯滤波
gauss_img = cv.GaussianBlur(img_data,(9,9),0)
gauss_img2 = cv.GaussianBlur(img_data,(19,19),0)
gauss_img3 = cv.GaussianBlur(img_data,(29,29),0)
cv.imshow("img",gauss_img)
cv.imshow("img2",gauss_img2)
cv.imshow("img3",gauss_img3)
可以看到,高斯滤波比均值滤波要好一点.
中值滤波
def make_sp_noise(image,ration):
h,w = image.shape[:2]
image_copy = image.copy()
nums = int(h * w * ration)
for i in range(nums):
row = np.random.randint(0,h)
col = np.random.randint(0,w)
if i % 2 == 0:
image_copy[row,col] = 255
else:
image_copy[row,col] = 0
return image_copy
img_data = cv.cvtColor(img_data,cv.COLOR_BGR2RGB)
noise_img_data = make_sp_noise(img_data,0.3)
cv.imshow("noise_img",noise_img_data)
下边用中值滤波开始去噪
median_img1 = cv.medianBlur(noise_img_data,1)
median_img2 = cv.medianBlur(noise_img_data,3)
median_img3 = cv.medianBlur(noise_img_data,5)
cv.imshow("noise_img1",median_img1)
cv.imshow("noise_img2",median_img2)
cv.imshow("noise_img3",median_img3)
双边滤波
img_data = cv.imread("../00000.jpg")
shuangbian_data1 = cv.bilateralFilter(img_data,0,21,21)
shuangbian_data2 = cv.bilateralFilter(img_data,0,41,41)
shuangbian_data3 = cv.bilateralFilter(img_data,0,61,61)
cv.imshow('img',img_data)
cv.imshow('shuangbian',shuangbian_data1)
cv.imshow('shuangbian2',shuangbian_data2)
cv.imshow('shuangbian3',shuangbian_data3)
磨皮效果
以上是cv对图片的一些处理…
Original: https://blog.csdn.net/qq_36538942/article/details/126261915
Author: 奔跑的蜗牛啊啊
Title: 图像处理(cv)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/532717/
转载文章受原作者版权保护。转载请注明原作者出处!