OpenCV / Python:cv2.add()中的错误是向图像添加数字

时间:2015-09-22 08:50:46

标签: python opencv image-processing

我正在使用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

我使用的图片是messi.jpg enter image description here

相反,如果我使用img2 = np.add(img2, np.uint8([50]))强度传递值{255} value % 255 result260%255=4像素的值设置为4而不是255.结果,白色像素变为黑色!

这是错误的结果图像。 enter image description here

有什么想法吗?

2 个答案:

答案 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