Как обрезать изображения внутри нарисованной границы с помощью 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • В чем разница между использованием CV2.Imread (PATH) с CVTCOLOR против CV2.Imread (PATH, CV2.imread_GrayScale) в OpenCV?
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Можно ли с помощью PHP обрезать или обрезать часть имени подкаталога?
    Anonymous » » в форуме Php
    0 Ответы
    65 Просмотры
    Последнее сообщение Anonymous
  • Обрезать изображение с помощью реакции - настроить стиль реагирования-легко-обрезать
    Anonymous » » в форуме CSS
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Поиск конечных точек нарисованной линии с помощью opencv
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Создание нарисованной подписи с помощью C# Docusign SDK
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

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