python openCV 去色差
我想用openCV对一张16位的RAW静态图片进行去马赛克处理,但在使用cvtColor函数时遇到了问题。将彩色图像转换为灰度图像时,使用下面的代码可以得到正确的结果:
import cv2
import numpy as np
infile = '/media/rainer/IMG_2806.JPG'
img = cv2.imread(infile,1)
bw = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
resized = cv2.resize(bw, (0,0), fx=0.3, fy=0.3)
cv2.imshow('image',resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
那么在Python 2.7中,去马赛克的代码应该是什么样的呢?我尝试的这个不行:
infile = '/media/rainer/test.raw'
img = cv2.imread(infile,0)
debayer = cv2.cvtColor(img, cv2.CV_BayerBG2BGR)
resized = cv2.resize(debayer, (0,0), fx=0.3, fy=0.3)
cv2.imshow('image',resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
非常感谢大家的帮助……
2 个回答
1
试试这个:
import os
import cv2
imagePath = '/path/to/image'
imageRaw = cv2.imread(imagePath, cv2.IMREAD_GRAYSCALE | cv2.IMREAD_ANYDEPTH)
rgb = cv2.cvtColor(imageRaw, cv2.COLOR_BAYER_BG2BGR)
cv2.imwrite('rgb.png', rgb)
5
问题在于,OpenCV不知道你要加载的原始图像的数据类型和大小。你需要通过Numpy来告诉它这些信息,因为在Python中,OpenCV的数组其实就是Numpy数组。你可以试试这样做:
import numpy as np
imsize = imrows*imcols
with open(infile, "rb") as rawimage:
img = np.fromfile(rawimage, np.dtype('u1'), imsize).reshape((imrows, imcols))
colour = cv2.cvtColor(img, cv2.COLOR_BAYER_BG2BGR)
对于16位每像素的图像,使用 np.dtype('u2')
。另外,要注意你需要使用 cv2.COLOR_BAYER_BG2BGR,而不是 cv2.CV_BayerBG2BGR。