我真的被这个难住了。我的代码中有一个[BGR2GRAY]的图像,现在我需要在其中添加彩色圆圈等。当然这不能在 1 通道矩阵中完成,而且我似乎无法将这该死的东西变回 3。
numpy.dstack()
崩溃一切
opencv2 中不存在 GRAY2BGR
cv.merge(src1, src2, src3, dst)
已经变成了cv2.merge(mv)
mv =“矩阵向量”,无论这意味着什么。
有任何想法吗?
我真的被这个难住了。我的代码中有一个[BGR2GRAY]的图像,现在我需要在其中添加彩色圆圈等。当然这不能在 1 通道矩阵中完成,而且我似乎无法将这该死的东西变回 3。
numpy.dstack()
崩溃一切
opencv2 中不存在 GRAY2BGR
cv.merge(src1, src2, src3, dst)
已经变成了cv2.merge(mv)
mv =“矩阵向量”,无论这意味着什么。
有任何想法吗?
它是 python 的等价物: imgray 是一个包含 1 通道图像的 numpy 数组。
img2 = cv2.merge((imgray,imgray,imgray))
这是在 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)
下面我假设您没有正确形状的 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
当我需要这个时,我正在使用 tensorflow。这是我的解决方案:
image = tf.expand_dims(image, -1)
x1 = image.shape[0]
x2 = image.shape[1]
image = tf.reshape(tf.broadcast_to(image, (x1, x2, 3)), (x1, x2, 3))
我不能说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);