使用 opencv python 将转置矩阵合并回图像

Merge transposed matrix back to image using opencv python

使用 cv2.imread(exmaple) 加载图像后,我可以看到照片并使用它。我想将图像拆分为 b,g,r 使用 B 矩阵,转置它,并在所有其他通道都为零时再次合并它。我收到此错误:

bluet = cv2.merge((mtrxz,mtrxz,bt))

cv2.error: ......\modules\core\src\convert.cpp:296: error: (-215) mv[i].size == mv[0].size && mv[i].depth() == depth in function cv::merge


这是我的代码:

def colors():
    img = cv2.imread('img.jpg')
    b,g,r = cv2.split(img)
    mtrxz = np.zeros(b.shape,np.uint8)

    bt = np.transpose(b)
    bluet = cv2.merge((mtrxz,mtrxz,bt))

已经尝试:
1.Show 它与 bluet = cv2.merge((mtrxz,mtrxz,bt)) 并且成功了
2.Print bt,看矩阵

我从你的代码中看到你没有检查矩阵维度,因此转置一个通道 (b) 你与其他通道不匹配。 为了更清楚这里是一个例子:

t0.
img.shape = (256x100) x 3
t1.
转置(b)=> bt.shape = 100x256
t2.
合并 (256x100)x2 && (100x256) => 错误!

我也尝试转置零矩阵,它对我有用。举个例子:

import cv2
import numpy as np

img = cv2.imread('img.jpg')
b,g,r = cv2.split(img)
mtrxz = np.zeros(b.shape,np.uint8)

bt = np.transpose(b)
#bluet = cv2.merge((mtrxz,mtrxz,bt))
bluet = cv2.merge((np.transpose(mtrxz),np.transpose(mtrxz),bt))

希望对您有所帮助