如何使用 Opencv 计算图像的动态范围?良好动态范围的价值是什么?如何使用opencv计算它?
问问题
4378 次
3 回答
2
图像的动态范围是最大和最小亮度值之差的 log2(以 EV 表示);考虑到图像是用线性响应模型编码的。
使用 OpenCV,您可以访问图像的像素值,因此迭代并应用公式。
于 2013-01-10T14:20:08.313 回答
0
动态范围为 20*log(maxv / minv),其中 maxv 和 minv 是图像的最大和最小像素值。这不应与信息内容或信噪比相混淆,信噪比测量信号(最大最小值)除以本底噪声的比率。
#include <math.h>
#include <opencv\highgui.h>
#include <opencv\cv.h>
#include <opencv\cxcore.h>
// Place your grayscale image with unsigned integer pixel values in img:
Mat img;
double minVal;
double maxVal;
Point minLoc;
Point maxLoc;
minMaxLoc( img, &minVal, &maxVal, &minLoc, &maxLoc );
dr = 20*log10(maxVal/(1+minVal))
于 2021-04-11T05:07:51.277 回答
0
我创建了一个函数,它返回作为参数传递的给定图像路径的计算动态范围列表。我计算了动态范围,例如:
- 获取像素的RGB信息
- 计算亮度
- 获取给定照片的亮度最大值和最小值
- 应用动态范围计算公式
这里的代码:
def dinamic_range(list_of_images):
dinamic_range = []
for img in list_of_images:
image = cv2.imread(img, cv2.IMREAD_COLOR)
pixel_brightness = []
for x in range (1,480):
for y in range (1,640):
try:
pixel = image[x,y]
R, G, B = pixel
brightness = sum([R,G,B])/3
pixel_brightness.append(brightness)
except IndexError:
pass
din_range = round(np.log2(max(pixel_brightness))-np.log2(min((pixel_brightness))), 2)
dinamic_range.append(din_range)
print('The image', img, 'has a dinamic range of', din_range, 'EV')
return dinamic_range
于 2021-04-11T10:21:51.967 回答