我正在使用OpenCV / Python而我正在尝试为图像添加数字。
我的代码是:
import cv2
import numpy as np
import math
from matplotlib import pyplot as plt
img = cv2.imread('messi.jpg',0)
img2 = img
img2 = cv2.add(img2, np.uint8([50]))
我收到了下一个错误:
OpenCV Error: Assertion failed (type2 == CV_64F && (sz2.height == 1 || sz2.heigh
t == 4)) in cv::arithm_op, file C:\builds\master_PackSlaveAddon-win64-vc12-stati
c\opencv\modules\core\src\arithm.cpp, line 1989
Traceback (most recent call last):
File "lab3_examples.py", line 27, in <module>
img2 = cv2.add(img, np.uint8([50]))
cv2.error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core
\src\arithm.cpp:1989: error: (-215) type2 == CV_64F && (sz2.height == 1 || sz2.h
eight == 4) in function cv::arithm_op
相反,如果我使用img2 = np.add(img2, np.uint8([50]))
强度传递值{255} value % 255 result
, 260%255=4
像素的值设置为4而不是255.结果,白色像素变为黑色!
有什么想法吗?
答案 0 :(得分:1)
在 C++ 中为此使用 saturate_cast(...)。 在 Python 中简单
img2 = cv2.add(img2, 50)
可以,如果您想增加灰度图像的亮度。如果暗示有颜色,色彩平衡将发生变化。对于彩色图像,为了保持平衡,Alex, Bill Grates 给出了很好的答案:
How to fast change image brightness with python + OpenCV?
唯一的说明 - 代码的下一部分不是必需的:
v[v > 255] = 255
v[v < 0] = 0 就我而言(Python3,Opencv4)。
答案 1 :(得分:0)
我建议将BGR图像转换为HSV图像:
hsv= cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
然后使用以下方式拆分频道:
h_channel, s_channel, v_channel = cv2.split(hsv)
现在使用h_channel
:
h_channel + = 20 #---You can try any other value as well---
现在再次将频道合并在一起:
merged = cv2.merge((h_channel , s_channel , v_channel ))
最后将图像转换回BGR并显示它:
Final_image = cv2.cvtColor(merged, cv2.COLOR_HSV2BGR)
cv2.imshow('Final output', Final_image)
根据您添加的值,您将看到增强或暗淡的图像。
希望它有所帮助....:D