我想用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()
Run Code Online (Sandbox Code Playgroud)
那么debayer在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()
Run Code Online (Sandbox Code Playgroud)
THX有很多帮助...。
问题是 OpenCV 不知道您尝试加载的原始图像的数据类型和大小。您必须通过 Numpy 指定,因为 OpenCV 数组是 Python 中的 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)
Run Code Online (Sandbox Code Playgroud)
使用np.dtype('u2')16个BPP图像。另请注意,您需要 cv2.COLOR_BAYER_BG2BGR 而不是 cv2.CV_BayerBG2BGR。