2017-01-08 88 views
0

我使用open cv將兩個圖像讀入numpy數組。我嘗試了兩種不同的方程用於將這些圖像Opencv使用imshow和imwrite的不同輸出

等式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

回答

4

輸出的差異不是由於使用操作者*/,但由於cv2.imshow(),在第一種情況下,當你使用mul_img = 0.5*tiger + 0.5*nature隱式轉換爲floar32返回矩陣的dtype,因爲你使用浮點數作爲操作數之一。但在第二種情況下,矩陣和numberdtype僅爲int,因此div_img = tiger/2 + nature/2返回的矩陣的dtype將爲uint8類型。

現在cv2.imshow()有一些嚴重的問題,同時渲染4通道RGBA圖像,它忽略了Alpha通道或渲染墊浮點數,等等。現在你只剩下2個解決方案:

  • 使用cv2.imwrite()調試圖片:

    cv.imwrite("path/to/img.jpg", mul_img) 
    
  • cv2.imshow()

    之前的圖像轉換爲
    mul_img = mul_img.astype(np.uint8) 
    
+0

謝謝,這也解釋了爲什麼正在使用imwrite生成正確的圖像。 –