Увеличение ширины / высоты изображения (без изменения размера) - PullRequest
1 голос
/ 07 февраля 2020

] С https://www.pyimagesearch.com/2018/07/19/opencv-tutorial-a-guide-to-learn-opencv/

Я могу извлечь контуры и записать в виде файлов. Например, у меня есть фотография с набросанным текстом: « там ».

Мне удалось извлечь буквы как отдельные файлы, но я хочу, чтобы эти файлы писем должна иметь одинаковую ширину и высоту. Например, в случае «i» и «r» ширина будет отличаться. В этом случае я хочу добавить (любые ч / б пиксели) справа от фотографии «i», чтобы ее ширина стала такой же, как у «r»

Как это сделать в Python? Просто увеличьте размер фотографии (без изменения размера)

Мой код выглядит примерно так:

# find contours (i.e., outlines) of the foreground objects in the
# thresholded image
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
output = image.copy()


ROI_number = 0
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    ROI = image[y:y+h, x:x+w]
    file = 'ROI_{}.png'.format(ROI_number)
    cv2.imwrite(file.format(ROI_number), ROI)

[resize the image] [1

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Вот несколько других способов сделать это, используя Python / OpenCV, используя cv2.copyMakeBorder (), чтобы расширить границу вправо на 50 пикселей. Первый способ просто расширяет границу путем репликации. Второй расширяет его средним (средним) синим цветом фона, используя маску, чтобы получить только синие пиксели.

Ввод:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('i.png')

# get mask of background pixels (for result2b only)
lowcolor = (232,221,163)
highcolor = (252,241,183)
mask = cv2.inRange(img, lowcolor, highcolor)

# get average color of background using mask on img (for result2b only)
mean = cv2.mean(img, mask)[0:3]
color = (mean[0],mean[1],mean[2])

# extend image to the right by 50 pixels
result = img.copy()
result2a = cv2.copyMakeBorder(result, 0,0,0,50, cv2.BORDER_REPLICATE)
result2b = cv2.copyMakeBorder(result, 0,0,0,50, cv2.BORDER_CONSTANT, value=color)

# view result
cv2.imshow("img", img)
cv2.imshow("mask", mask)
cv2.imshow("result2a", result2a)
cv2.imshow("result2b", result2b)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save result
cv2.imwrite("i_extended2a.jpg", result2a)
cv2.imwrite("i_extended2b.jpg", result2b)


Реплицированный результат:

enter image description here

Средний цвет фона Результат:

enter image description here

0 голосов
/ 08 февраля 2020

В Python / OpenCV / Numpy вы создаете новое изображение нужного размера и цвета фона. Затем вы используете numpy нарезку, чтобы вставить старое изображение в новое. Например:

Ввод:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('i.png')
ht, wd, cc= img.shape

# create new image of desired size (extended by 50 pixels in width) and desired color
ww = wd+50
hh = ht
color = (242,231,173)
result = np.full((hh,ww,cc), color, dtype=np.uint8)

# copy img image into image at offsets yy=0,xx=0
yy=0
xx=0
result[yy:yy+ht, xx:xx+wd] = img

# view result
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save result
cv2.imwrite("i_extended.jpg", result)


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...