本来想做Hough的,结果在灰度上就有疑问。
根据网上的资料,灰度变换有几种:1、0.299,0.587,0.114对应rgb的权重。
2、直接平均
做了下,自己全黑。后来发现有两个原因:1、溢出。原图像的数组是uint8的类型,默认数组的类型是float64(好一个坑。。。),三个数相加超过了255
2、imshow只能显示uint8,我强制转换的int不行,变换后新图像的float64类型不行。
改正后好了,代码如下:
import cv2
import numpy as np
pic=cv2.imread("C:\\Users\\acer\\Pictures\\book.jpg")
pic_float=pic.astype(np.float)
pic1=cv2.cvtColor(pic, cv2.COLOR_RGB2GRAY)
cv2.imshow("GRAY",pic1)
x=pic.shape[0]
y=pic.shape[1]
pic2=np.zeros((x,y))
for i in range(x):
for j in range(y):
pic2[i][j]=(299*pic_float[i][j][2]+587*pic_float[i][j][1]+114*pic_float[i][j][0])/1000
pic2=pic2.astype(np.uint8)
cv2.imshow("MY_GRAY",pic2)
cv2.imshow("MINUS",pic1-pic2)
最后一行是作比较用的。图如下: