python - OpenCV 错误:(-215:Assertion failed) !_src.empty() in function 'cvtColor'
问题描述
我正在使用 opencv 来操作图像。确切的错误是:
OpenCV(4.1.0) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
我已经在整个互联网上进行了搜索,但我找不到解决方案。
在此过程中多次调用同一图像,并且大部分都可以正常工作。我在这个函数中得到一个错误:
def percentage(image, box_points): #box point is touple here. ((x1,y1),(x2,y2))
x1=box_points[0][0]
x2=box_points[1][0]
y1=box_points[0][1]
y2=box_points[1][1]
rows,cols,c =image.shape
M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
image = cv2.warpAffine(image,M,(cols,rows))
image=image[int(x1):int(x2),int(y1):int(y2)]
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# ret, bw_img = cv2.threshold(image,160,255,cv2.THRESH_BINARY)
# bw_img = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 7)
bw_img = cv2.adaptiveThreshold(image,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)
# image=image[int(x1):int(x2),int(y1):int(y2)]
# bw_img is our binary image here.
count = cv2.countNonZero(bw_img)
total = bw_img.shape[1] * bw_img.shape[0]
ratio = count/total
ratio =1-ratio
return ratio, bw_img
我在调用 cv2.cvtColor 的行中出现错误。该函数给出黑色像素与总像素的比率。在整个项目中多次调用相同的图像,因此错误不应与缺少图像有关。
此外,在测试时,我将图像逆时针旋转了 90 度。这很好用,但只适用于一个特定的图像。在这里帮帮我。
我在这里附上原始图像。当我将它旋转 90 度时它可以工作。
解决方案
我试过你的代码。它工作正常。虽然我在裁剪图像的那一行做了些许修改。你正在做的是roi = im[x1:x2, y1:y2]
但它应该是roi = im[y1:y2, x1:x2]
。查看此stackoverflow 帖子以获取有关如何使用numpy slicing
. 这可能是您遇到上述错误的原因。您必须检查以验证这一点。
这种微小的变化可能非常重要。检查以下比较:
两种情况的函数调用:percentage(img, ((10, 10), (300, 600)))
情况1: image=image[int(x1):int(x2),int(y1):int(y2)]
案例二: image=image[int(y1):int(y2), int(x1):int(x2)]
我不知道您是否有意这样做,但请验证一次。
推荐阅读
- scala - 如何使用 Akka Stream 和 Akk-Http 流式传输响应
- c - 使其他进程正确处理 SIGTERM
- javascript - 错误无法读取未定义的属性“添加”
- c# - 控制台应用程序入口点和静态非异步方法
- python - 无法从 Python 中的另一个文件夹导入模块
- mysql - MySQL - 从当天数据中减去前一天数据,有特殊条件
- c++ - 对 Eigen 块的自动引用未按预期运行
- c# - c#根据一个共同的id合并两个文本文件
- vba - 在某个循环结束之前,无法让我的脚本处理错误
- google-cloud-platform - 试用期结束后我的 Google Cloud 试用积分会怎样