I've been trying to solve this Python problem for the last 4 days... I have a black and white image (.png or .jpg), for example:
I would like to load it (let's call it "heart.png") and convert it to the following array format:
[1,1,0,1,1,1,0,1,1,1],
[1,0,0,0,1,0,0,0,1,1],
[0,1,1,1,0,1,1,1,0,1],
[0,1,1,1,1,1,1,1,0,1],
[0,1,1,1,1,1,1,1,0,1],
[0,1,1,1,1,1,1,1,0,1],
[1,0,1,1,1,1,1,0,1,1],
[1,1,0,1,1,1,0,1,1,1],
[1,1,1,0,0,0,1,1,1,1],
[1,1,1,1,0,1,1,1,1,1],
In words: I would like to analyse every single pixel in every row and convert it to a matrix that writes white as "1" and black as "0" (or the other way around..doesn't matter, because I can invert colours before), divided by comma between pixels, every row should be hold in square brackets and also divided by comma.
I really need help with this, I think OpenCV could solve this but I don't know how...
Thanks in advance!
You can use OpenCV and Numpy to read the image, assuming your image is grayscale with just black and white colors.
import numpy as np
import cv2
img = cv2.imread("your-image-here.png", cv.IMREAD_GRAYSCALE) # The image pixels have range [0, 255]
img //= 255 # Now the pixels have range [0, 1]
img_list = img.tolist() # We have a list of lists of pixels
result = ""
for row in img_list:
row_str = [str(p) for p in row]
result += "[" + ", ".join(row_str) + "],\n"
If your image is more complicated than what you posted in your question then you should probably use more advanced techniques such as thresholding.