Bug:cv2.imshow颜色只能展示黑白

问题

最近在jupyter notebook中使用opencv时候,发现一个问题,就是在使用cv2.imshow()展示图片的时候,有添加一些颜色操作的地方,显示的时候一直是黑白的颜色,不管如何设置颜色三色素的组合排列[0, 255, 0]等。

原因

原因是图像读入的时候是使用的cv2.imread('xxxx.jpg', 0)
最开始就直接读成了灰度图,再次对其进行颜色操作的时候只能是两个通道,没有三个通道的元素进行组合,所以导致显示的是灰度图

import cv2
img = cv2.imread('approx.png', 0)
rows, cols = img.shape[:2]
ret, thresh = cv2.threshold(img, 127, 250, 0)
cnt, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
[vx,vy,x,y] = cv2.fitLine(cnt[0], cv2.DIST_L2, 0,0.01,0.01)
lefty = int((-x*vy/vx) + y)
righty = int(((cols-x)*vy/vx)+y)
cv2.line(img,(cols-1,righty),(0,lefty),(255,255,0),2)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
 

Bug:cv2.imshow颜色只能展示黑白_第1张图片

解决方法

先完全读入彩色图,之后使用cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)转成灰度图,绘图的时候还是针对原始彩色图进行处理

import cv2
img = cv2.imread('approx.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
rows, cols = img.shape[:2]
ret, thresh = cv2.threshold(img_gray, 127, 250, 0)
cnt, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
[vx,vy,x,y] = cv2.fitLine(cnt[0], cv2.DIST_L2, 0,0.01,0.01)
lefty = int((-x*vy/vx) + y)
righty = int(((cols-x)*vy/vx)+y)
cv2.line(img,(cols-1,righty),(0,lefty),(0,255,0),2)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bug:cv2.imshow颜色只能展示黑白_第2张图片

你可能感兴趣的:(Bug合集,opencv,python,cv2.imshow,cv2.imread)