我需要使用循环进行图像分割。也就是说,选择一个硬币。但是我不知道该怎么做。这是我可悲的尝试:
import cv2
a=[]
image = cv2.imread(r'E:\coin.jpg')
for line in image:
for elem in line:
if elem >=60:
a.append('1')
else:
a.append('0')
cv2.imshow('Gray image', a)
cv2.waitKey(0)
结果,我得到了这个错误
Traceback (most recent call last):
File "C:\Users\den22\AppData\Local\Programs\Python\Python36\123.py", line 9, in <module>
if elem >=60:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
能告诉我我做错了什么吗?
答案 0 :(得分:1)
如果可能的话,应尽量避免对数组进行迭代。
import cv2
import numpy as np
image = cv2.imread(r'E:\coin.jpg', cv2.IMREAD_GRAYSCALE)
threshold = 60
binary_mask = np.zeros_like(image)
above_threshold = np.where(image >= 60)
binary_mask[above_threshold] = 1
cv2.imshow(binary_mask)
这显式显示了逻辑,创建一个零数组,然后标识感兴趣的值,并将binary_mask中的那些值设置为1。您也可以仅绘制一个布尔数组:
bool_array = image >= 60
cv2.imshow(bool_array)