Как обрезать изображения внутри нарисованной границы с помощью cv2?Python

Программы на Python
Anonymous
Как обрезать изображения внутри нарисованной границы с помощью cv2?

Сообщение Anonymous »

Я хочу обрезать изображения, которые были определены граничными линиями, нарисованными cv2. Текущий сценарий может точно определять и рисовать границы изображения, но я обнаружил, что трудно обрезать области изображения, определенные в граничных линиях. Следующий скрипт выберет два верхних крупнейших контура. Может ли кто-нибудь помочь мне отредактировать так, чтобы после выбора двух верхних самых больших контуров изображения внутри контровых обрезались?
import cv2
import numpy as np
import matplotlib.pyplot as plt

image_path = r'C:\Users\bear\Good\230903134657_HNN3TDMXY_1_Delam Analysis.jpg'

image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

def count_contours(image,th):
_, binary_image = cv2.threshold(image, th, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

contour_areas = [(cv2.contourArea(contour), contour) for contour in contours]
contour_areas.sort(key=lambda x: x[0], reverse=True) # Sort by area, largest first

total_contours_count = len(contour_areas)
print(total_contours_count)

return total_contours_count

def draw_contours(image,th):
_, binary_image = cv2.threshold(image, th, 255, cv2.THRESH_BINARY)

contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)

contour_areas = [(cv2.contourArea(contour), contour) for contour in contours]
contour_areas.sort(key=lambda x: x[0], reverse=True) # Sort by area, largest first

total_contours_count = len(contour_areas)

top_contours = [contour for _, contour in contour_areas[:2]]

contour_image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
cv2.drawContours(contour_image, top_contours, -1, (0, 255, 0), 2)

cv2.imwrite('drawcountourtest.png', contour_image)
plt.imshow(cv2.cvtColor(contour_image, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()

test_count = count_contours(image,130)

if test_count > 300:
print(test_count)

draw_contours(image,200)
else:
print(test_count)
draw_contours(image,130)


Подробнее здесь: https://stackoverflow.com/questions/789 ... ary-by-cv2

Вернуться в «Python»