使用imshow和imwrite

时间:2017-01-08 08:39:03

标签: 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()

使用的原始图像:

Tiger image

enter image description here

生成的图像如下:

division image

multiplication image

1 个答案:

答案 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