24

私はこれに本当に困惑しています。コードの前半で[BGR2GRAY]した画像がありますが、今度はそれに色付きの円などを追加する必要があります。もちろん、これは1チャネルのマ​​トリックスでは実行できません。また、気の毒なことを3に戻すことはできないようです。

numpy.dstack()すべてをクラッシュさせる

GRAY2BGRはopencv2には存在しません

cv.merge(src1, src2, src3, dst)cv2.merge(mv)mv = "行列のベクトル"、それが何を意味するかにかかわらず、ここに変換されました。

何か案は?

Opencv2.4.3 refmanual

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

np.array(img).shapeimgがnumpy配列の場合、からに短縮できますimg.shape

于 2019-08-30T08:48:33.187 に答える
1

これが必要なときは、テンソルフローを使用していました。これが私の解決策です:

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 に答える