jpg转海思nnie所需要的.bgr格式的数据

# -*- 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)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值