Home > Blockchain >  cv2.imwrite doesn't save result image but initial only
cv2.imwrite doesn't save result image but initial only

Time:03-07

I have a code:

import cv2
import numpy

background = numpy.zeros((1080, 1920, 3))
img = numpy.ones((255, 465, 3))
offset = numpy.array((12, 12))

x_offset = offset[0]
y_offset = offset[1]

img_w = img.shape[1]
img_h = img.shape[0]

background_w = background.shape[1]
background_h = background.shape[0]

x = x_offset
y = y_offset
for i in range(0, 16):
    background[y:y   img.shape[0], x:x   img.shape[1]] = img
    x  = img_w   x_offset
    if x > background_w - img_w:
        x = x_offset
        y  = img_h   y_offset

cv2.imshow("test", background)
cv2.imwrite("background.jpg", background)
cv2.waitKey(0)
cv2.destroyAllWindows()

that generates grid like this one:

enter image description here

So cv2.imshow shows the grid but cv2.imwrite writes only initial black background not the grid for some reason. How to fix that?

CodePudding user response:

You need to scale the color channels:

cv2.imwrite("background.jpg", background)

cv2.imwrite("background.jpg", background * 255)

Alternatively you can create a "white" image with type uint8:

img = numpy.ones((255, 465, 3))

img = numpy.ones((255, 465, 3), dtype = numpy.uint8) * 255
  • Related