我真的很难过这个。我的代码中有一张[BGR2GRAY]'的图像,现在我需要添加彩色圆圈等等。当然这不可能在1通道矩阵中完成,而且我似乎无法将该死的东西变回3.
numpy.dstack()崩溃了所有内容
opencv2中不存在GRAY2BGR
cv.merge(src1,src2,src3,dst)已经变成了cv2.merge(mv),其中mv =“矩阵向量”,无论这意味着什么。
有什么想法吗?
答案 0 :(得分:8)
以下是在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)
答案 1 :(得分:1)
我不能说python,但我可以告诉你C ++接口......
gray_image //you have it already
Mat im_coloured = Mat::zeros(gray_image.rows,gray_image.cols,CV_8UC3);
vector<Mat> planes;
for(int i=0;i<3;i++)
planes.push_back(gray_image);
merge(planes,im_coloured);
答案 2 :(得分:1)
与python等效: imgray是一个包含1通道图像的numpy数组。
img2 = cv2.merge((imgray,imgray,imgray))
答案 3 :(得分:0)
以下,我假设您没有适当形状的3通道图像,因此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