Opencv不同的输出与imshow和imwrite

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)

使用的原始图像:

老虎形象

在此输入图像描述

生成的图像如下:

分裂图像

乘法图像

Zda*_*daR 7

输出的差不是由于使用操作员*/,但由于cv2.imshow(),在第一种情况,当您使用mul_img = 0.5*tiger + 0.5*naturedtype隐式转换为返回矩阵的floar32,因为你使用浮点数作为一个操作数.但在第二种情况下,dtype矩阵和仅numberint,所以dtype返回的矩阵div_img = tiger/2 + nature/2的类型uint8.

现在cv2.imshow()渲染4通道RGBA图像时会出现一些严重问题,它会忽略alpha通道或使用浮点数等渲染Mat.现在剩下2个解决方案: