python - 增加彩色图像亮度时的索引数量不正确
问题描述
代码在读取灰度图像以执行亮度时工作正常。但是相同的代码不适用于彩色图像。如何从彩色图像执行亮度操作?
在参数 0 处使用 cv2.imread 读取图像时工作正常,但我尝试使用 1 它不起作用,因为 0 用于灰度图像,1 用于彩色图像。
import numpy as np
import cv2
img = cv2.imread('image1.jpg',1)
height = img.shape[0]
width = img.shape[1]
brightness = 100
for i in np.arange(height):
for j in np.arange(width):
a = img.item(i,j)
b = a + brightness
if b > 255:
b = 255
img.itemset((i,j), b)
cv2.imwrite('brightness.jpg', img)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我希望读取彩色图像并执行亮度操作,但它显示 ValueError: wrong number of indices for array
解决方案
一种解决方案是使用OpenCV 归一化将图像拉伸到全动态范围(0 到 255)。
以下是两个输出结果,具体取决于最小和最大拉伸限制。请注意,规范化适用于浮点数据,最小值和最大值名义上被拉伸到 0 到 1 的整个范围。但是我们需要将结果剪辑到这个范围,然后将它们缩放到 0 到 255 的范围,然后保存为 uint8 用于输出, 如果最小值和最大值超出 0 到 1 的范围。
The first result is stretched to min and max of 0 to 1.
The second result is stretched to min and max of 0 to 1.2 in order to make it even brighter.
图片:
#!/bin/python3.7
import cv2
import numpy as np
# read image
img = cv2.imread("zelda1_bm20_cm20.jpg", cv2.IMREAD_COLOR)
# normalize float versions
norm_img1 = cv2.normalize(img, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
norm_img2 = cv2.normalize(img, None, alpha=0, beta=1.2, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
# scale to uint8
norm_img1 = (255*norm_img1).astype(np.uint8)
norm_img2 = np.clip(norm_img2, 0, 1)
norm_img2 = (255*norm_img2).astype(np.uint8)
# write normalized output images
cv2.imwrite("zelda1_bm20_cm20_normalize1.jpg",norm_img1)
cv2.imwrite("zelda1_bm20_cm20_normalize2.jpg",norm_img2)
# display input and both output images
cv2.imshow('original',img)
cv2.imshow('normalized1',norm_img1)
cv2.imshow('normalized2',norm_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
最小值和最大值(0 到 1):
最小值和最大值(0 到 1.2):
推荐阅读
- android - jarsigner: the signer's certificate is self signed warning
- python - 如何在 gnumeric Python 插件函数代码中获取单元格的列号和行号?
- php - 如何在 laravel php 中从数据集编写子查询
- python - 如何将高音扬声器数据保存在 json 文件中?
- c# - 如何添加带参数值且不带 lambda 表达式的委托
- javascript - for 循环遍历 index[0] 两次
- python - 我需要创建一个 pandas 数据框,显示推文所代表的主题
- r - 将 data.frame 对象中的数值变量添加到包含 multpolygons 的 sf 对象
- spring - 使用 mongoDb(如 Firebase 或 Realtime Server 应用程序)的 Spring Boot
- javascript - 为什么我的反应应用程序中的后续警报会显示给定会话中显示的第一个警报中的“useCountdown 挂钩计时器”?