我知道有mean()用于c ++和cvAvgC的Opencv函数,它们可以找到所有通道的平均图像.我需要在一个方向上找到图像的所有通道的平均值/平均值,即在所有列上的平均值(结果:单行向量)和所有行的平均值(结果:单列向量).是否有任何功能或有效的方法(可能没有分割通道或使用for循环)这样做?
我想更改图像的背景并向其添加 Alpha 通道,然后再将其保存为 png 文件。
imshow显示图像,但imwrite写入空图像。合并后的尺寸也是正确的,即合并后的图像(x,y,4)在打印时具有img_a.shape
图像深度为uint8. 我尝试将其更改为float32然后除以255但似乎没有任何效果。我缺少一些基本的东西。
我应该怎么做才能imwrite用 alpha 通道写入正确的 png ?我尝试cv2.merge过并且np.dstack。imwrite写失败。用 gimp 打开它时,它显示一层。
以下是我的代码。
imgo = cv2.imread('PCP_1.jpg')
image = cv2.GaussianBlur(imgo, (5, 5), 0)
r = image.shape[0]
c = image.shape[1]
shp = (r,c,1)
c_red, c_green, c_blue = cv2.split(image)
#c_red = c_red.astype(np.float32)
#c_green =c_green.astype(np.float32)
#c_blue = c_blue.astype(np.float32)
alphachn = np.zeros(shp)
#alphachn = alphachn.astype(np.float32)
img_a = cv2.merge((c_red, c_green, c_blue, alphachn))
#img_a …Run Code Online (Sandbox Code Playgroud) 我有一个Mat类型的矢量,大小为1 x 720 x 3,即一行,720列和3个通道.我检查了尺寸如下
vector<Mat> image_rows_avg;
cout<<image_rows_avg[0].size;
Run Code Online (Sandbox Code Playgroud)
它给出了一些像0x918840的值.可能这.size()是在给一些地址.所以我试着去做
cout<<image_rows_avg[0].size[0]; 这给了ans: 1
cout<<image_rows_avg[0].size[1];给出ans:720哪个是正确的,再次
cout<<image_rows_avg[0].size[2];给出了ans:159187328又一次垃圾.
我无法理解这是怎么回事.我认为.size()应该直接给出矢量的大小.