OpenCV: 灰度变换和直方图修正

灰度化

加权平均值实现

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2 as cv
import numpy as np
image=cv.imread("pic.png")
h=np.shape(image)[0]
w=np.shape(image)[1]
gray_img=np.zeros((h,w,3),np.uint8)
for i in range(h):
for j in range(w):
gray_img[i,j]=0.3*image[i,j][0]+0.59*image[i,j][1]+0.11*image[i,j][2]
cv.imshow("src",image)
cv.imshow("gray",gray_img)
cv.waitKey(0)
cv.destroyAllWindows()

最大法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
 import cv2 as cv
import numpy as np
image=cv.imread("pic.png")
h=np.shape(image)[0]
w=np.shape(image)[1]
gray_img=np.zeros((h,w,3),np.uint8)
for i in range(h):
for j in range(w):
gray_img[i,j]=max(image[i,j][0],image[i,j][1],image[i,j][2])
cv.imshow("src",image)
cv.imshow("gray",gray_img)
cv.waitKey(0)
cv.destroyAllWindows()

平均法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2 as cv
import numpy as np
image=cv.imread("pic.png")
h=np.shape(image)[0]
w=np.shape(image)[1]
gray_img=np.zeros((h,w,3),np.uint8)
for i in range(h):
for j in range(w):
gray_img[i,j]=(image[i,j][0]+image[i,j][1]+image[i,j][2])/3
cv.imshow("src",image)
cv.imshow("gray",gray_img)
cv.waitKey(0)
cv.destroyAllWindows()

灰度线性变换

1
2
3
4
5
6
7
8
9
10
11
import cv2 as cv
import numpy as np
img=cv.imread("pic.png")
out=1.8*img
out[out>255]=255
out=np.around(out)
out=out.astype(np.uint8)
cv.imshow("img",img)
cv.imshow("out",out)
cv.waitKey(0)
cv.destroyAllWindows()

分段线性变换

1