Sta*_*use 22 python opencv opencv3.0
我有以下代码:
imgs = glob.glob('/home/chipin/heart/tray.png')
current_img = io.imread(imgs[0])
cv2.imwrite('/home/chipin/heart/01.png', current_img[0:511,0:511])
Run Code Online (Sandbox Code Playgroud)
图片尺寸为512*512,保存后蓝色图片变黄.似乎放弃了一个频道.我真的不知道为什么.
这是current_img的值:
Dan*_*šek 52
您的问题在于skimage.io.imread
将图像加载为RGB(或RGBA),但OpenCV假定图像为BGR或BGRA(BGR是默认的OpenCV颜色格式).这意味着蓝色和红色平面会翻转.
让我们用以下简单的测试图像来试试这个:
首先让我们试试你的原始算法:
import skimage.io
import cv2
img = skimage.io.imread('sample.png')
cv2.imwrite('sample_out_1.png', img)
Run Code Online (Sandbox Code Playgroud)
我们得到以下结果:
如您所见,红色和蓝色通道可以明显交换.
第一种方法,假设您仍然希望使用skimage读取和cv2写入是用于cv2.cvtColor
从RGB转换为BGR.
由于新的OpenCV文档没有提到Python语法,在这种情况下,您也可以使用适当的2.4.x参考.
import skimage.io
import cv2
img = skimage.io.imread('sample.png')
cv2.imwrite('sample_out_2.png', cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
Run Code Online (Sandbox Code Playgroud)
现在我们得到以下输出:
另一种方法是使用OpenCV - 用于cv2.imread
加载图像.在这种情况下,我们只使用BGR图像.
注意:cv2.IMREAD_COLOR
默认情况下不使用任何标志装置- 即图像始终作为3通道图像加载(丢弃任何潜在的Alpha通道).
import cv2
img = cv2.imread('sample.png')
cv2.imwrite('sample_out_3.png', img)
Run Code Online (Sandbox Code Playgroud)
从屏幕截图中可以看出,您有一个4通道图像.这将意味着在滑雪中的RGBA和在OpenCV中的BGRA.原则类似.
cv2.COLOR_RGBA2BGRA
cv2.imread
旗帜cv2.IMREAD_UNCHANGED