У меня есть изображение, и я хотел бы найти интенсивность нулевой области (черный). Моя идея - нарисовать маленькую рамку вокруг черной области. Это то, что я ожидаю в качестве результата.
(x, y)
- центр коробки. Я рисую 40
блок вокруг него
Моя попытка выглядит следующим образом:
import cv2
from random import *
img = cv2.imread("path/to/image.png", cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (600, 800))
rows,cols = img.shape[:2]
try:
for i in range(100):
x = randint(1, rows) # Pick a random number between 1 and rows.
y = randint(1, cols) # Pick a random number between 1 and rows.
while True:
sum_intensity = 0
for i in range(x-20, x+20):
for j in range(y-20, y+20):
intensity = img[i,j]
sum_intensity += intensity
if sum_intensity == 0:
print("zero intensity found")
cv2.rectangle(img, (x-20, y+20), (x+20, y-20), (255, 255, 255), 2)
cv2.imwrite("path/to/save.png", img)
break
else:
print("No zero intensity")
break
except:
pass
один из примеров сгенерированных блоков приведен ниже: вы можете видеть, в которых есть перекрывающиеся блоки с серым регионом, которого я хочу избежать !! Я должен выбрать полный фон (черный). Кроме того, мне просто нужна одна коробка ... не нужно видеть несколько из них. Я знаю, что могу использовать переменную boolian, но не знаю, как в python.