OpenCV MergeMertens在Python Vs中给出不同的结果。C ++

埃拉德·约瑟夫

当我在Python中运行HDR Mertens曝光融合时,我得到了奇怪的颜色伪影,而在c ++中运行完全相同的函数却没有。(我只是运行HDR教程

在我看来,数据类型有些问题,但是我尝试了所有选项,但没有任何效果。难道我做错了什么?

我正在使用OpenCV 3.0.0运行Python 3.5 64位。

曝光图像来自Wikipedia: 1/30秒1/4秒2.5秒15秒

Python代码:

import cv2
import numpy as np

img_fn = ["640px-StLouisArchMultExpEV+4.09.jpg",
          "640px-StLouisArchMultExpEV+1.51.jpg",
          "640px-StLouisArchMultExpEV-1.82.jpg",
          "640px-StLouisArchMultExpEV-4.72.jpg"]
img_list = [cv2.imread(fn) for fn in img_fn]

# Exposure fusion using Mertens
mergeMertens = cv2.createMergeMertens()
resFusion = mergeMertens.process(img_list)

# Convert datatype to 8-bit and save
resFusion_8bit = np.uint8(resFusion*255)
cv2.imwrite("fusion.png", resFusion_8bit)

我在Python中得到的结果:

在此处输入图片说明

我在C ++中得到的结果:

在此处输入图片说明

nn

这里发生的是由某些R,G,B子像素的8位上溢和下溢引起的。其中一些超出[0.0 .. 1.0]融合后的时间间隔,并且与255相乘时,结果将为负或大于255。

np.uint8 将截断结果,并仅保留最低有效8位,因此例如:

  • 的值-2将存储为254

  • 的值257将存储为1

这可以通过将范围内的结果剪裁[0 .. 255],替换来解决

resFusion_8bit = np.uint8(resFusion*255)

np.clip(resFusion*255, 0, 255, out=resFusion)
resFusion_8bit = resFusion.astype('uint8')

或者,可以将乘以255的值直接传递给imwrite,而无需先将其转换为uint8,这样就可以进行裁剪。与提供的C ++示例中的操作相同。因此,脚本可以重写为:

import cv2

img_fn = ["640px-StLouisArchMultExpEV+4.09.JPG",
          "640px-StLouisArchMultExpEV+1.51.JPG",
          "640px-StLouisArchMultExpEV-1.82.JPG",
          "640px-StLouisArchMultExpEV-4.72.JPG"]
img_list = [cv2.imread(fn) for fn in img_fn]

# Exposure fusion using Mertens
mergeMertens = cv2.createMergeMertens()
resFusion = mergeMertens.process(img_list)

# Save
cv2.imwrite("fusion.png", resFusion*255)

(请注意,我将文件扩展名替换为.JPG-大写,因为这是Wikipedia的原始名称,并且我已经在Linux上运行了此扩展名,文件名区分大小写。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c++中的opencv convertTo与Python中的手动转换之间的不同结果

来自分类Dev

opencv python中的轮廓近似每次都给出错误的结果

来自分类Dev

OpenCV / Python中的粗线

来自分类Dev

Python OpenCV中的ValueError

来自分类Dev

Opencv python HoughLinesP奇怪的结果

来自分类Dev

OpenCV:Python vs. Julia中的drawKeypoints()

来自分类Dev

使用OpenCV通过Python和C ++计算基本矩阵的结果不同

来自分类Dev

OpenCV调整python和javascript之间结果的大小显着不同

来自分类Dev

Matlab渐变和OpenCV渐变给出不同的结果

来自分类Dev

OPENCV PYTHON中的透视变换

来自分类Dev

Python:了解OpenCV中的read()

来自分类Dev

python中的OpenCV示例代码

来自分类Dev

在OpenCV Python中裁剪矩形

来自分类Dev

opencv python中的椭圆检测

来自分类Dev

在 opencv (python) 中阅读视频

来自分类Dev

Python与C ++ OpenCV匹配模板

来自分类Dev

从C ++ OpenCV 3.0调用Python

来自分类Dev

在 Opencv C++ 中从右到左给出轮廓

来自分类Dev

在已经使用OpenCV但版本不同的C ++中使用OpenCV将Python嵌入Python的内存损坏

来自分类Dev

如何读取matchTemplate的结果(Python中的OpenCV2)

来自分类Dev

R和Python中的广义线性模型给出的结果与MATLAB中的结果不同

来自分类Dev

在已经使用OpenCV但版本不同的C ++中将内存与OpenCV嵌入python的内存损坏

来自分类Dev

opencv与python模块有不同的版本

来自分类Dev

opencv与python模块有不同的版本

来自分类Dev

在Python中从VideoCapture opencv获取特定帧

来自分类Dev

在轮廓Opencv Python中获取面积?

来自分类Dev

OpenCV 2.4.9(Python)中的概率Hough变换

来自分类Dev

Python openCV中的实时人工检测

来自分类Dev

使用Python在OpenCV中删除图像

Related 相关文章

热门标签

归档