Python OpenCV和MATLAB之间的不同颜色结果
发布时间:2020-12-20 13:14:28 所属栏目:Python 来源:网络整理
导读:我要将RGB图像转换为YIQ图像,反之亦然.问题是 Python给我一个奇怪的图像,而MATLAB显示正确的图像.我花了几个小时来弄清楚什么是错的,但我仍然不知道. 我使用Python 3.5.2与OpenCV 3.1.0和MATLAB R2016a. RGB2YIQ的Python代码: import cv2 as cvimport numpy
我要将RGB图像转换为YIQ图像,反之亦然.问题是
Python给我一个奇怪的图像,而MATLAB显示正确的图像.我花了几个小时来弄清楚什么是错的,但我仍然不知道.
我使用Python 3.5.2与OpenCV 3.1.0和MATLAB R2016a. RGB2YIQ的Python代码: import cv2 as cv import numpy as np def rgb2yiq(img): row,col,ch = img.shape Y = np.zeros((row,col)) I = np.zeros((row,col)) Q = np.zeros((row,col)) for i in range(row): for j in range(col): Y[i,j] = 0.299 * img[i,j,2] + 0.587 * img[i,1] + 0.114 * img[i,0] I[i,j] = 0.596 * img[i,2] - 0.274 * img[i,1] - 0.322 * img[i,0] Q[i,j] = 0.211 * img[i,2] - 0.523 * img[i,1] + 0.312 * img[i,0] yiq = cv.merge((Y,I,Q)) return yiq.astype(np.uint8) def main(): img = cv.imread("C:/Users/Kadek/Documents/MATLAB/peppers.jpg") img = rgb2yiq(img) cv.imwrite("YIQ.jpg",img) cv.namedWindow('Image',cv.WINDOW_NORMAL) cv.imshow('Image',img) cv.waitKey(0) cv.destroyAllWindows() main() RGB2YIQ的MATLAB代码: img = imread('peppers.jpg'); [row col ch] = size(img); for x=1:row for y=1:col Y(x,y) = 0.299 * img(x,y,1) + 0.587 * img(x,2) + 0.114 * img(x,3); I(x,y) = 0.596 * img(x,1) - 0.274 * img(x,2) - 0.322 * img(x,3); Q(x,y) = 0.211 * img(x,1) - 0.523 * img(x,2) + 0.312 * img(x,3); end end yiq(:,:,1) = Y; yiq(:,2) = I; yiq(:,3) = Q; figure,imshow(yiq); Result for RGB2YIQ YIQ2RGB的Python代码: import cv2 as cv import numpy as np def yiq2rgb(img): row,ch = img.shape r = np.zeros((row,col)) g = np.zeros((row,col)) b = np.zeros((row,col)) for i in range(row): for j in range(col): r[i,j] = img[i,0] * 1.0 + img[i,1] * 0.9562 + img[i,2] * 0.6214 g[i,0] * 1.0 - img[i,1] * 0.2727 - img[i,2] * 0.6468 b[i,1] * 1.1037 + img[i,2] * 1.7006 rgb = cv.merge((b,g,r)) return rgb.astype(np.uint8) def main(): img = cv.imread("YIQ.jpg") img = yiq2rgb(img) cv.imwrite("test.jpg",img) cv.waitKey(0) cv.destroyAllWindows() main() YIQ2RGB的MATLAB代码: img = imread('YIQ.jpg'); [row col ch] = size(img); for x=1:row for y=1:col R(x,y) = 1.0 * img(x,1) + 0.9562 * img(x,2) + 0.6214 * img(x,3); G(x,1) - 0.2727 * img(x,2) - 0.6468 * img(x,3); B(x,1) - 1.1037 * img(x,2) + 1.7006 * img(x,3); end end rgb(:,1) = R; rgb(:,2) = G; rgb(:,3) = B; imwrite(rgb,'YIQ2RGB.jpg'); figure,imshow(rgb); Result for YIQ2RGB 有人说我曾经在操作之前将图像转换为float64.已经尝试过,但没有改变. 解决方法
由于某些计算分量超出范围[0,255],您显然会遇到饱和问题.钳制值或调整增益.
然后似乎在某处交换了组件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |