我使用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()
使用的原始图像:
生成的图像如下:
答案 0 :(得分:6)
输出的差异不是由于使用了运算符*
或/
,而是由于cv2.imshow()
,在第一种情况下使用mul_img = 0.5*tiger + 0.5*nature
{{1返回的矩阵隐式转换为dtype
,因为您使用浮点数作为操作数之一。但在第二种情况下,矩阵和floar32
的{{1}}仅为dtype
,因此来自number
的返回矩阵的int
将是输入dtype
。
现在div_img = tiger/2 + nature/2
在渲染4通道RGBA图像时会遇到一些严重问题,它会忽略alpha通道或使用浮点数等渲染Mat。现在剩下2个解决方案了:
使用uint8
调试图像:
cv2.imshow()
在cv2.imwrite()
cv.imwrite("path/to/img.jpg", mul_img)
uint8