Заменить часть изображения opencv?

Ссылка скопирована
1 ответ

Все привет! Не получается заменить горизонтальные линии в изображении такими же горизонтальными линиями, но смещенными, т.е замазать горизонтальную линию чтобы потом можно было легче распознать цифры.
Ругается на "ValueError: could not broadcast input array from shape (47,16,3) into shape (51,20,3)"
Правильно ли я понимаю, что он ругается на то что я пытаюсь во фрагмент который имеет определенные размеры вставить объект который больше по размерам или нет? Что не правильно?
картинка в примере

Заменить часть изображения opencv?

import numpy as np import cv2 image = cv2.imread('crop4.jpg',1)  def summa(item):     item=np.add(item,10)     item = np.intc(item)     if item>=100:         item=np.intc(100)     elif item<=0:         item=np.intc(0)     return item cv2.imshow('Lines1', image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) edged = cv2.Canny(gray, 160, 250) lines=cv2.HoughLinesP(edged,1,np.pi/180,30,minLineLength=10, maxLineGap=10) lin_horiz=[] lin_vert=[] for i in range(len(lines)):     lin=lines[i][0]     if lin[0]==lin[2]:         lin_vert.append(lin)     elif lin[1]==lin[3]:         lin_horiz.append(lin) for i, lin in enumerate(lin_horiz): #Линии которые надо заменить     cv2.line(image, (lin[0], lin[1]), (lin[2], lin[3]), (0, 0, 255), 1) #Замена линии     img[lin[0]:summa(lin[1]), lin[2]:summa(lin[3])]=img[lin[0]:lin[1], lin[2]:lin[3]] cv2.imshow("change_44444", image) cv2.imshow("change_line", img)

import numpy as np import cv2 image = cv2.imread('crop4.jpg',1) def summa(item): item=np.add(item,10) item = np.intc(item) if item>=100: item=np.intc(100) elif item<=0: item=np.intc(0) return item cv2.imshow('Lines1', image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) edged = cv2.Canny(gray, 160, 250) lines=cv2.HoughLinesP(edged,1,np.pi/180,30,minLineLength=10, maxLineGap=10) lin_horiz=[] lin_vert=[] for i in range(len(lines)): lin=lines[i][0] if lin[0]==lin[2]: lin_vert.append(lin) elif lin[1]==lin[3]: lin_horiz.append(lin) for i, lin in enumerate(lin_horiz): #Линии которые надо заменить cv2.line(image, (lin[0], lin[1]), (lin[2], lin[3]), (0, 0, 255), 1) #Замена линии img[lin[0]:summa(lin[1]), lin[2]:summa(lin[3])]=img[lin[0]:lin[1], lin[2]:lin[3]] cv2.imshow("change_44444", image) cv2.imshow("change_line", img)

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

Для замены части изображения с использованием библиотеки OpenCV вам потребуется выполнить несколько шагов:

1. Загрузите исходное изображение с помощью функции `cv2.imread()`:

```html

import cv2
 
image = cv2.imread('original_image.jpg')

import cv2 image = cv2.imread('original_image.jpg')

```

2. Определите область, которую вы хотите заменить, указав координаты верхнего левого угла и нижнего правого угла:

```html

top_left = (x1, y1)
bottom_right = (x2, y2)
 
roi = image[y1:y2, x1:x2]

top_left = (x1, y1) bottom_right = (x2, y2) roi = image[y1:y2, x1:x2]

```

3. Загрузите новое изображение, которое вы хотите вставить вместо выбранной области:

```html

new_image = cv2.imread('new_image.jpg')
```

4. Убедитесь, что размер нового изображения совпадает с размером выбранной области, если это необходимо, выполните изменение размера нового изображения:

```html

new_image_resized = cv2.resize(new_image, (x2-x1, y2-y1))
```

5. Замените выбранную область в исходном изображении на новое изображение:

```html

image[y1:y2, x1:x2] = new_image_resized
```

6. Сохраните результат в новый файл или отобразите его на экране:

```html

cv2.imwrite('result_image.jpg', image)
cv2.imshow('Result Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```

Таким образом, после выполнения этих шагов вы замените часть изображения с помощью библиотеки OpenCV. Не забудьте установить библиотеку OpenCV перед началом работы.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно