Pra*_*wal 0 python opencv numpy
我使用open cv将两个图像读入numpy数组.我尝试了两个不同的方程来添加这些图像
公式1:img =(img_one/2)+(img_two/2)
公式2:img =(0.5*img_one)+(0.5*img_two)
公式1按预期输出图像,但公式2输出完全意外的图像.
这是我的代码(python2):
import numpy as np
from cv2 import *
tiger = imread('tiger.jpg')
nature = imread('nature.jpg')
mul_img = 0.5*tiger + 0.5*nature
div_img = tiger/2 + nature/2
imshow('mul_image', mul_img)
imshow('div_image', div_img)
waitKey(0)
destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
使用的原始图像:
生成的图像如下:
输出的差不是由于使用操作员*或/,但由于cv2.imshow(),在第一种情况,当您使用mul_img = 0.5*tiger + 0.5*nature的dtype隐式转换为返回矩阵的floar32,因为你使用浮点数作为一个操作数.但在第二种情况下,dtype矩阵和仅number是int,所以dtype返回的矩阵div_img = tiger/2 + nature/2的类型uint8.
现在cv2.imshow()渲染4通道RGBA图像时会出现一些严重问题,它会忽略alpha通道或使用浮点数等渲染Mat.现在剩下2个解决方案:
使用cv2.imwrite()调试图像:
cv.imwrite("path/to/img.jpg", mul_img)
Run Code Online (Sandbox Code Playgroud)将图像转换为uint8之前cv2.imshow()
mul_img = mul_img.astype(np.uint8)
Run Code Online (Sandbox Code Playgroud)