gpt4 book ai didi

python - 无法将像素以正确的形状从 cv 代码传输到 cv2 代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:33 26 4
gpt4 key购买 nike

最近我想为我的工作做一些图像处理。不幸的是,我一直在尝试将支持 cv 的旧 C++ 代码应用于支持 cv2 的 python 代码。它不能很好地工作...任何人都可以帮助我吗?

原始 C++ 代码:

#define IMAGE_WIDE  40
#define IMAGE_LENGTH 30
#define CHANNELS 3

DNN_image_out = cvCreateImage(cvSize(IMAGE_WIDE, IMAGE_LENGTH), IPL_DEPTH_8U, 3);
for(int k = 0; k < IMAGE_LENGTH; k++){ //縦
for(int l = 0; l < IMAGE_WIDE; l++){ //横
DNN_image_out[i]->imageData[(k * IMAGE_WIDE + l)*3 +0] = DNN_image_tmp[(k * IMAGE_WIDE + l)*3 + 0 ];
DNN_image_out[i]->imageData[(k * IMAGE_WIDE + l)*3 +1] = DNN_image_tmp[(k * IMAGE_WIDE + l)*3 + 1 ];
DNN_image_out[i]->imageData[(k * IMAGE_WIDE + l)*3 +2] = DNN_image_tmp[(k * IMAGE_WIDE + l)*3 + 2 ];
}
}

我的 Python CV2 代码:

import numpy as np
import cv2

def split_channel3(array,width,height):
R=[]
G=[]
B=[]
for k in range(height):
for l in range(width):
R.append(array[(k * width + l)*3 +0])
G.append(array[(k * width + l)*3 +1])
B.append(array[(k * width + l)*3 +2])
R = np.asarray(R)
G = np.asarray(G)
B = np.asarray(B)
return [R,G,B]


[R,G,B] = split_channel3(img,40,30)
R = R.reshape(40,30,1)
G = G.reshape(40,30,1)
B = B.reshape(40,30,1)
Color_img = np.dstack((R,G))
Color_img = np.dstack((Color_img,B))
cv2.imshow('image',Color_img)
cv2.waitKey(0)

我的逻辑错了吗?或者我应该在 python 代码中更改什么?

最佳答案

您可以简单地使用cv2.split,而不需要您的自定义函数或reshape:

B,G,R = cv2.split(img)

然后最终使用:

Color_img  = cv2.merge((B,G,R))

请记住,在 OpenCV 中 channel 默认为 B、G、R,而不是 R、G、B。

关于python - 无法将像素以正确的形状从 cv 代码传输到 cv2 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35577380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com