Я хочу замаскировать несколько изображений по горизонтали - PullRequest
0 голосов
/ 18 октября 2019

У меня есть несколько изображений страниц журнала, в которых есть два столбца. Я хочу замаскировать один белый столбец без изменения размера. Это означает, что выходное изображение должно иметь те же размеры, что и входное изображение, даже если есть один столбец.

Мне удалось замаскировать изображение, но часть маски становится черной, и я хочу, чтобы она была белой.

import cv2

import numpy as np

# Load the original image

image = cv2.imread(filename = "D:\output_final_word5\image1.jpg")

# Create the basic black image 

mask = np.zeros(shape = image.shape, dtype = "uint8")

# Draw a white, filled rectangle on the mask image

cv2.rectangle(img = mask, pt1 = (0, 0), pt2 = (795, 3000), color = (255, 255, 

255), thickness = -1)

# Apply the mask and display the result

maskedImg = cv2.bitwise_and(src1 = image, src2 = mask)

#cv2.namedWindow(winname = "masked image", flags = cv2.WINDOW_NORMAL)

cv2.imshow("masked image",maskedImg)

cv2.waitKey(delay = 0)

cv2.imwrite("D:\Test_Mask.jpg",maskedImg)

Моя конечная цель - прочитать папку, в которой находятся несколько страниц журнала, в которых необходимо сохранитьМаскировка сначала одного столбца, а затем другого столбца без влияния на размер входного изображения и части маски должна быть белой. Ниже приведены входные изображения в приложении ...

Input_Image1

Input_Image2

И вывод должен быть таким....

Output_Image1

Output_Image2

1 Ответ

1 голос
/ 18 октября 2019

Вам не нужна маска для рисования прямоугольника. Вы можете нарисовать его прямо на изображении.

Вы также можете использовать image.copy() для создания второго изображения с другим столбцом

Кстати: если 795 находится в середине ширины, то вы можете использовать image.shape, чтобы получить (height,width) и используйте width//2 вместо 795, чтобы он работал с изображениями различной ширины. Но если 795 не идеально в середине, тогда используйте half_width = 795

import cv2

image_1 = cv2.imread('image.jpg')
image_2 = image_1.copy()

height, width, depth = image_1.shape # it gives `height,width`, not `width,height`
half_width = width//2
#half_width = 795

cv2.rectangle(img=image_1, pt1=(0, 0), pt2=(half_width, height), color=(255, 255, 255), thickness=-1)
cv2.rectangle(img=image_2, pt1=(half_width, 0), pt2=(width, height), color=(255, 255, 255), thickness=-1)

cv2.imwrite("image_1.jpg", image_1)
cv2.imwrite("image_2.jpg", image_2)

cv2.imshow("image 1", image_1)
cv2.imshow("image 2", image_2)

cv2.waitKey(0)
cv2.destroyAllWindows()
...