python - 在python中使用opencv库对图像进行阈值处理,使用for循环具有不同的标志
问题描述
我将 cv2 导入为 cv,创建了一个阈值标志列表,并连接了“cv”。使用标志,然后创建一个用于将标志作为参数传递的 for 循环。但是python显示TypeError。我附上了输出的图像。请帮助我使用循环或其他方式创建所有可能的阈值,除非每次都明确提及标志。
[ ]
解决方案
在 OpenCV 中,给定的阈值选项(例如 cv.THRESH_BINARY 或 cv.THRESH_BINARY_INV)实际上是常量整数值。您正在尝试使用字符串而不是这些整数值。这就是您收到类型错误的原因。如果您想在循环中应用所有这些不同的阈值,一种选择是为这些选项创建不同的列表,如下所示:
threshold_options = [cv.THRESH_BINARY, cv.THRESH_BINARY_INV, ...]
这样,您就可以在循环中使用此列表的值,如下所示:
retval, thresh = cv.threshold(img, 127, 255, threshold_options[i])
整个代码如下:
titles = [ 'THRESH_BINARY',
'THRESH_BINARY_INV',
'THRESH_MASK',
'THRESH_OTSU',
'THRESH_TOZERO',
'THRESH_TOZERO_INV',
'THRESH_TRIANGLE',
'THRESH_TRUNC']
threshold_options = [ cv.THRESH_BINARY,
cv.THRESH_BINARY_INV,
cv.THRESH_MASK,
cv.THRESH_OTSU,
cv.THRESH_TOZERO,
cv.THRESH_TOZERO_INV,
cv.THRESH_TRIANGLE,
cv.THRESH_TRUNC]
for i in range(len(titles)):
retval, thresh = cv.threshold(img, 127, 255, threshold_options[i])
plt.subplot(2,3,i+1), plt.title(titles[i]), plt.imshow(thresh, 'gray')
plt.show()
推荐阅读
- swift - 运行 Swift 代码所需的最小内存量是多少?
- r - R:我如何使用 R 的公式符号来紧凑地生成除选定的二次项子集之外的所有项?
- java - Java - 如何将输入字符串放入随机字母的二维数组中?
- python - Python 3.6:创建一个数据透视表,汇总数据框中多列的值计数
- python - 使用另一个 netcdf 文件在 netcdf 文件中填充 nan 值
- multithreading - 使用 var 参数的匿名线程过程
- r - 在 R 中使用收集制作多个条形图
- pointers - 在 Fortran 中的某个内存地址获取值
- python - 如何从 numpy 数组中删除两个最小的数字并计算中位数 python 3
- sql - 如何解决此查询