Заменить часть изображения opencv?
Все привет! Не получается заменить горизонтальные линии в изображении такими же горизонтальными линиями, но смещенными, т.е замазать горизонтальную линию чтобы потом можно было легче распознать цифры.
Ругается на "ValueError: could not broadcast input array from shape (47,16,3) into shape (51,20,3)"
Правильно ли я понимаю, что он ругается на то что я пытаюсь во фрагмент который имеет определенные размеры вставить объект который больше по размерам или нет? Что не правильно?
картинка в примере
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)
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для замены части изображения с использованием библиотеки OpenCV вам потребуется выполнить несколько шагов:
1. Загрузите исходное изображение с помощью функции `cv2.imread()`:
```html
import cv2 image = cv2.imread('original_image.jpg')
```
2. Определите область, которую вы хотите заменить, указав координаты верхнего левого угла и нижнего правого угла:
```html
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