Python을 통해 인코딩된 이미지 디코딩하기

14101 단어 Python
이 보도에서 제작된 2/4 변조 기호라고 불리는 인코딩 이미지의 디코딩 프로그램이 작성되었습니다. 주의점으로 이 인코딩 방식은 어떤 분야에 존재하지만 표준화되지 않아 원시적입니다.
여기 있습니다.
revpage.py
import numpy as np
import cv2
import sys

argv = sys.argv
argc = len(argv)


if argc < 2:
    print("利用方法:python revpage.py [basename] [number_of_page] [outputfile]")
    quit()

page_num = int(argv[2])

page_list = []
for i in range(page_num):
    page_list.append(cv2.imread("{0}{1}.png".format(argv[1], i), cv2.IMREAD_GRAYSCALE) > 0)

pix = (page_list[0].shape)[0]
page_max_bits = int((pix ** 2) / 2)


print("ページサイズ:{0}x{0}".format(pix))
print("復号ページ数:{}".format(page_num))
print("復号開始")

read_binary_str = ""
count = 0
for page in range(page_num):
    page_point = page*page_max_bits
    for py in range(int(pix / 2)):
        for px in range(int(pix / 2)):
            # print(binary_str[count*2:(count*2)+2])
            if page_list[page][py*2][px*2+1] == True:
                read_binary_str += '00'
            elif page_list[page][py*2][px*2] == True:
                read_binary_str += '01'
            elif page_list[page][py*2+1][px*2+1] == True:
                read_binary_str += '10'
            elif page_list[page][py*2+1][px*2] == True:
                read_binary_str += '11'

            count += 1

if read_binary_str[-8:] == '11101100':
    code_type = 0
elif read_binary_str[-8:] == '00010001':
    code_type = 1
else:
    code_type = -1

out_binary_str = read_binary_str
for i in range(int(len(read_binary_str)/8)):
    if code_type == 0:
        out_binary_str = out_binary_str[:-8]
        if out_binary_str[-8:] == '00010001':
            code_type = 1
        else:
            code_type = -1
    elif code_type == 1:
        out_binary_str = out_binary_str[:-8]
        if out_binary_str[-8:] == '11101100':
            code_type = 0
        else:
            code_type = -1
    elif code_type == -1:
        if out_binary_str[-8:] == '00000000':
            out_binary_str = out_binary_str[:-8]
            print("復号完了")
            break
        else:
            print("Format error.")
            quit()

with open(argv[3], 'w') as f:
    f.writelines(out_binary_str)
이용법은python revpage.py [basename] [number_of_page] [outputfile].
basename은 여러 장의 이미지를 뛰어넘는 상황에서 관찰 서열의 기초로 하는 공동 파일 이름입니다of_페이지는 복합 시퀀스 이미지의 장수입니다. 자동으로 검출되지만, 중요하지 않기 때문에 지령선에서 전달하기로 결정했습니다. outputfile는 복합 2진법을 텍스트로 변환하는 저장 대상 파일입니다.

대략적인 처리 내용

  • 우선 오픈cv를 통해 디코딩할 그림을 numby 배열에 읽습니다. 이 numby 배열은 목록화되어 수집됩니다.
  • 인코딩할 때의 역처리는 모든 이미지를 복합하여 얻은 결과를 문자열에 연결합니다.
  • 뒤에 있는 충전 코드와 종료 코드를 삭감한다.
  • 덤프

    시험해 보다


    이 보도에서 제작된 다음 이미지를 디코딩합니다.






    이것은 stn_page[連番].png라는 이미지입니다.python revpage.py stn_page 6 stn_page.bin 디코딩을 하고 표준 출력은 다음과 같다.
    표준 출력
    ページサイズ:256x256
    復号ページ数:6
    復号開始
    復号完了
    
    그래서 바이너리 파일이 저장되었다.
    이 파일의 이진 저장 데이터에서 이런로 만든 프로그램으로 원본 파일을 복원한다.
    결과적으로 이 문서는 완전히 복원되었다.
    이 보도

    감상


    즐거웠어
  • 좋은 웹페이지 즐겨찾기