firstly I am transforming an image into numpy array and writing it to a text file and this part is working
the problem is when i copy the txt content and dynamically paste it as vector and display the image. the colors are showing wrong.
enter image description here enter image description here
`
import cv2 import sys import numpy from PIL import Image numpy.set_printoptions(threshold=sys.maxsize) def img_to_txt_array(img): image = cv2.imread(img) # print(image) f = open("img_array.txt", "w") f.write(str(image)) f.close() meuArquivo = open('img_array.txt', 'r') with open('img_array.txt', 'r') as fd: txt = fd.read() txt = txt.replace(" ", ",") txt = txt.replace('n',',n') txt = txt.replace("[,", "[") txt = txt.replace(',[', '[') txt = txt.replace(",,", ",") txt = txt.replace(',[', '[') txt = txt.replace("[,", "[") txt = txt.replace(",,", ",") with open('img_array.txt', 'w') as fd: fd.write(txt) with open('img_array.txt', 'r') as fr: lines = fr.readlines() with open('img_array.txt', 'w') as fw: for line in lines: if line.strip('n') != ',': fw.write(line) def show_imagem(array): # Create a NumPy array arry = numpy.array(array) # Create a PIL image from the NumPy array image = Image.fromarray(arry.astype('uint8'), 'RGB') # Save the image #image.save('image.jpg') # Show the image image.show(image) array = [] #paste here the txt img_to_txt_array('mickey.png') show_imagem(array)
`
I need to get the colors right
Advertisement
Answer
Thing is, OpenCV reads images in BGR order, while PIL uses RGB order.
You may fix this at several points in your program (when reading, when saving, or when re-reading again).
For example, you can re-arrange the array, right after you read the image:
def img_to_txt_array(img): image = cv2.imread(img) image = image[:,:,::-1] ## ====> NEW. Reordering BGR to RGB ..... ## the rest of the function is the same ..... ## (though there are other issues)
Also, rather than copy-paste the array, here is a function to read it directly from your .txt file (might NOT be optimal):
#array = [] #paste here the txt ## ==> not used anymore, see below def load_array(f): with open(f) as data: ar_rows = data.readlines() ar_str = "".join(ar_rows) return eval(ar_str) img_to_txt_array('mickey.png') array = load_array('img_array.txt') show_imagem(array)
I hope this helps.