使用循环进行图像分割

时间:2020-04-09 09:24:15

标签: python

我需要使用循环进行图像分割。也就是说,选择一个硬币。但是我不知道该怎么做。这是我可悲的尝试:

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()

能告诉我我做错了什么吗?

1 个答案:

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