Python+OpenCV実現画像をバイナリフォーマットに変換します。


tenssorflowを学ぶ過程で、画像ファイルではなくバイナリ画像データベースファイルを読み込む問題があります。
訓練、テストを行う前に画像ファイルをバイナリ形式に変換する必要があります。
以下はbuntuでpython+OpenCVを使って画像を読み取り、バイナリ形式のファイルに変換するコードです。

#coding=utf-8
'''
Created on 2016 3 24 
  Opencv                ,         ,         
@author: hanchao
'''
import cv2
import numpy as np
import struct

image = cv2.imread("test.jpg")
#imageClone = np.zeros((image.shape[0],image.shape[1],1),np.uint8)

#image.shape[0] rows
#image.shape[1] cols
#image.shape[2] channels
#image.shape = (480,640,3)
rows = image.shape[0]
cols = image.shape[1]
channels = image.shape[2]
#           
#python      ,f = open('name','wb')
#  wb        
fileSave = open('patch.bin','wb')
for step in range(0,rows):
  for step2 in range(0,cols):
    fileSave.write(image[step,step2,2])
for step in range(0,rows):
  for step2 in range(0,cols):
    fileSave.write(image[step,step2,1])
for step in range(0,rows):
  for step2 in range(0,cols):
    fileSave.write(image[step,step2,0])
fileSave.close()
    
#            
#python       , rb
#f.read(n) n         ,         ,  struct.unpack("B",fileReader.read(1))  
#  “B”      ,     ,“b”      , 1   
#“c” char  ,     
#“i” int  ,     ,I      , 4   
#“h”、“H” short  ,     ,       、   
#“l”、“L” long  ,     ,       、   
fileReader = open('patch.bin','rb')
imageRead = np.zeros(image.shape,np.uint8)
for step in range(0,rows):
  for step2 in range(0,cols):
    a = struct.unpack("B",fileReader.read(1))
    imageRead[step,step2,2] = a[0]
for step in range(0,rows):
  for step2 in range(0,cols):
    a = struct.unpack("b",fileReader.read(1))
    imageRead[step,step2,1] = a[0]
for step in range(0,rows):
  for step2 in range(0,cols):
    a = struct.unpack("b",fileReader.read(1))
    imageRead[step,step2,0] = a[0]
    
fileReader.close()
cv2.imshow("source",image)
cv2.imshow("read",imageRead)
cv2.waitKey(0)
以上のPythoon+OpenCVは画像をバイナリ形式に変換することを実現しました。つまり、小編集は皆さんのすべての内容を共有しています。皆様に参考にしてもらいたいです。どうぞよろしくお願いします。