# -*- coding: utf-8 -*-
# @Time : 2020/8/11 下午5:47
# @Author :libin
# @File : jpg2bgr.py
# @Software: PyCharm
import cv2
from numpy import *
import numpy as np
import glob
import os
class JPG2BGR(object):
def __init__(self,basedir="./",test_path="./test.bgr",image_size="416"):
self.img_size = image_size # save bgr size
self.imgpath = basedir
self.path = test_path
def letterbox(self,image):
"""
letterbox
:param image: source box
:return:
"""
ih = iw = self.img_size
h, w, _ = image.shape
scale = min(iw / w, ih / h)
nw, nh = int(scale * w), int(scale * h)
image_resized = cv2.resize(image, (nw, nh))
image_paded = np.full(shape=[ih, iw, 3], fill_value=128.0,dtype=np.uint8)
dw, dh = (iw - nw) // 2, (ih - nh) // 2
image_paded[dh:nh + dh, dw:nw + dw, :] = image_resized
return image_paded
def reverseletterbox(self,image,target_shape):
"""
:param image:
:param target_shape: target image shape(h,w,c)
:return:
"""
ih,iw,_=image.shape
h, w, _ = target_shape
scale=min(ih/h,iw/w)
n_h,n_w=int(h*scale),int(w*scale)
dh,dw=(ih-n_h)//2,(iw-n_w)//2
new_img=image[dh:dh+n_h,dw:dw+n_w,:]
targetimg=cv2.resize(new_img, (w, h))
return targetimg
def jpg2bgr(self):
save_img_size = self.img_size
imgpath = self.imgpath
imgfile=glob.glob(os.path.join(imgpath,"*.jpg"))
for jpg in imgfile:
img = cv2.imread(jpg)
n_img=self.letterbox(img)
if n_img is None:
print("img is none")
else:
cv2.imwrite(jpg,n_img)
(B, G, R) = cv2.split(n_img)
savepath=self.imgpath+os.path.basename(jpg)[:-3]+'bgr'
with open(savepath, 'wb')as fp:
for i in range(save_img_size):
for j in range(save_img_size):
fp.write(B[i, j])
for i in range(save_img_size):
for j in range(save_img_size):
fp.write(G[i, j])
for i in range(save_img_size):
for j in range(save_img_size):
fp.write(R[i, j])
print("save success")
def transform(self,test=False):
if not test:
self.jpg2bgr()
else:
self.bgr2rgb()
def bgr2rgb(self,shape=(1080,1920,3)):
path = self.path
imgsize = self.img_size
f = open(path, 'rb')
src=np.zeros(shape, np.uint8)
src = cv2.resize(src, (imgsize, imgsize))
print(src.shape)
B, G, R = cv2.split(src)
data = f.read(imgsize * imgsize * 3)
for j in range(imgsize):
for i in range(imgsize):
R[j, i] = data[j * imgsize + i]
G[j, i] = data[j * imgsize + i + imgsize * imgsize]
B[j, i] = data[j * imgsize + i + imgsize * imgsize * 2]
newimg = cv2.merge([R,G,B])
newimg=self.reverseletterbox(newimg,shape)
cv2.imshow("test",newimg)
cv2.waitKey(0)
cv2.imwrite('./Test.jpg',newimg)
f.close()
cv2.waitKey(0)
if __name__ == '__main__':
preprocess=JPG2BGR("/mnt/share/test/","/mnt/share/test/0.bgr",416)
preprocess.transform(test=True)