24

我真的被这个难住了。我的代码中有一个[BGR2GRAY]的图像,现在我需要在其中添加彩色圆圈等。当然这不能在 1 通道矩阵中完成,而且我似乎无法将这该死的东西变回 3。

numpy.dstack()崩溃一切

opencv2 中不存在 GRAY2BGR

cv.merge(src1, src2, src3, dst)已经变成了cv2.merge(mv)mv =“矩阵向量”,无论这意味着什么。

有任何想法吗?

Opencv2.4.3参考手册

4

5 回答 5

19

它是 python 的等价物: imgray 是一个包含 1 通道图像的 numpy 数组。

img2 = cv2.merge((imgray,imgray,imgray))
于 2018-06-21T09:43:34.620 回答
18

这是在 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)
于 2013-02-09T10:09:06.713 回答
2

下面我假设您没有正确形状的 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).shapeimg.shape

于 2019-08-30T08:48:33.187 回答
1

当我需要这个时,我正在使用 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))
于 2021-08-30T12:23:38.940 回答
0

我不能说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);
于 2013-02-09T08:43:37.947 回答