最近我尝试为我的工作做一些图像处理。 不幸的是,我一直试图将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代码中更改什么?
答案 0 :(得分:1)
您只需使用cv2.split
即可,无需使用自定义功能,也无需使用reshape
:
B,G,R = cv2.split(img)
然后逐渐使用:
Color_img = cv2.merge((B,G,R))
请记住,默认情况下,OpenCV中的通道为B,G,R,而不是R,G,B。