如何用opencv2将单通道图像转换为三通道?
我现在真的很困惑。我有一张图片,之前在代码里把它转换成了灰度图(也就是只用黑白色),现在我想在上面加一些彩色的圆圈之类的东西。当然,这在只有一个通道的图像上是做不到的,我似乎也无法把它再转换回三个通道的彩色图。
numpy.dstack()
这个方法让我整个程序崩溃了。
在opencv2里没有找到将灰度图转换回彩色图的方法。
cv.merge(src1, src2, src3, dst)
这个方法变成了 cv2.merge(mv)
,其中 mv 是“一个矩阵的向量”,这到底是什么意思我也搞不清楚。
有没有什么好主意?
8 个回答
6
在这里,我假设你没有一个形状正确的三通道图像,所以上面答案中提到的zeros_like函数可能用不上。
img2 = np.zeros( ( np.array(img).shape[0], np.array(img).shape[1], 3 ) )
img2[:,:,0] = img # same value in each channel
img2[:,:,1] = img
img2[:,:,2] = img
如果img是一个numpy数组,那么可以把np.array(img).shape
简化为img.shape
27
这段话的意思是:这是Python中的一个等价写法;imgray是一个包含单通道图像的numpy数组。
img2 = cv2.merge((imgray,imgray,imgray))
24
这里有一种在Python中实现这个功能的方法:
img = cv2.imread("D:\\img.jpg")
gray = cv2.cvtColor(img, cv.CV_BGR2GRAY)
img2 = np.zeros_like(img)
img2[:,:,0] = gray
img2[:,:,1] = gray
img2[:,:,2] = gray
cv2.circle(img2, (10,10), 5, (255,255,0))
cv2.imshow("colour again", img2)
cv2.waitKey()
下面是OpenCV3的完整代码:
import cv2
import numpy as np
img = cv2.imread('10524.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img2 = np.zeros_like(img)
img2[:,:,0] = gray
img2[:,:,1] = gray
img2[:,:,2] = gray
cv2.imwrite('10524.jpg', img2)