给出cv2.readimg()
读取的图像,如下所示:
cv2.imread(path)
,然后调用cv2.equalizeHist
时发生以下错误:
Traceback (most recent call last):
hist = cv2.equalizeHist(cv_image)
cv2.error: OpenCV(4.1.0) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/histogram.cpp:3345: error: (-215:Assertion failed) _src.type() == CV_8UC1 in function 'equalizeHist'
我已阅读并应用了this问题和this一个问题的答案。这是first答案中应用的代码:
import cv2
removedNoise = cv2.medianBlur(img,3)
removedNoise1 = np.uint8(removedNoise)
hist = cv2.equalizeHist(cv_image)
这里是修改second答案的相同代码:
from skimage import img_as_ubyte
cv_image = img_as_ubyte(removedNoise)
hist = cv2.equalizeHist(cv_image)
在两种情况下,都发生相同的原始错误。有关如何解决此问题的建议将不胜感激。我正在opencv 4.1.0
上使用macos
。
答案 0 :(得分:2)
所附的回溯状态表明:
(-215:断言失败)_src.type()==函数'equalizeHist'中的CV_8UC1
其中指出cv2. equalizeHist()
的输入参数必须是单个通道图像。默认情况下,cv2.imread()
返回3通道BGR图像,即使该图像本质上是灰度的。您可以尝试以下建议之一来解决此错误:
cv2.imread("path/to/img.png", cv2.IMREAD_GRAYSCALE)
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
答案 1 :(得分:1)
equalizeHist
采用参数src
,其中src
应该是8位单通道图像。
在您的代码中,您正在将图像读取为3通道图像或BGR。您可以像这样以GrayScale读取图像,
img = cv2.imread(path, 0)
将此图像传递到equalizeHist
如下所示,将提供所需的输出。
hist = cv2.equalizeHist(img)
您可以找到文档here以获得更多详细信息。
0
中的imread
是指示图像颜色类型的标志。您可以详细了解flags
here。
答案 2 :(得分:0)
为什么不使用Python Wand(基于Imagemagick)?这是仅几行代码的直方图均衡示例。
输入:
gsutil ls gs://tm_ufs
INFO 0604 14:17:49.749002 retry_util.py] Retrying request, attempt #1...
INFO 0604 14:18:51.684501 retry_util.py] Retrying request, attempt #2...
INFO 0604 14:19:54.875942 retry_util.py] Retrying request, attempt #3...
INFO 0604 14:21:03.459085 retry_util.py] Retrying request, attempt #4...
INFO 0604 14:22:22.220589 retry_util.py] Retrying request, attempt #5...
INFO 0604 14:23:48.716924 retry_util.py] Retrying request, attempt #6...
INFO 0604 14:25:20.733894 retry_util.py] Retrying request, attempt #7...
INFO 0604 14:26:52.750410 retry_util.py] Retrying request, attempt #8...
INFO 0604 14:28:24.763793 retry_util.py] Retrying request, attempt #9...