python opencv 4 좌표 로 그림 자 르 기

본 고 는 주로 python opencv 가 4 좌 표를 통 해 그림 을 자 르 고 여러분 에 게 공유 하 는 것 을 소개 합 니 다.구체 적 으로 다음 과 같 습 니 다.
효과 전시,
在这里插入图片描述
재단 한 단어 그림(아래)
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
이 프로그램 에서 저 는 paddleOCR 에 사용 되 었 습 니 다.식별 모델 을 통 해 식 별 된 그림 을 프로그램 이 제공 하 는 좌표(즉 네 개의 정점 값)에 따라 파 는 프로그램(위의 our 와 and 는 단추 그림)을 사용 하고 봉인 을 했 습 니 다.같은 형식 은 이 를 바탕 으로 바 뀌 었 습 니 다.
[[[368.0, 380.0], [437.0, 380.0], [437.0, 395.0], [368.0, 395.0]], [[496.0, 376.0], [539.0, 378.0], [538.0, 397.0], [495.0, 395.0]], [[466.0, 379.0], [498.0, 379.0], [498.0, 395.0], [466.0, 395.0]], [[438.0, 379
.0], [466.0, 379.0], [466.0, 395.0], [438.0, 395.0]], ]
프로그램 에서 얻 은 데이터 형식 은 대략 위의 모양 으로 네 개의 좌표 한 조 의 데이터(아래 와 같다)로 구성 된다.즉,아래 의[368.0,380.0]은 그림 의 왼쪽 상단 좌 표를 자 르 려 고 하고[437.0,380.0]은 그림 의 오른쪽 상단 좌 표를 자 르 려 고 한다.[437.0,395.0]은 그림 의 오른쪽 하단 좌 표를 자 르 려 고 하고[368.0,395.0]은 그림 의 왼쪽 하단 좌 표를 자 르 려 고 한다.
[[368.0, 380.0], [437.0, 380.0], [437.0, 395.0], [368.0, 395.0]]
여기 서 그림 을 자 르 는 것 은 opencv 를 사용 합 니 다.(매개 변수 로 인해 각 도 를 설정 하지 않 으 면 평행 사각형 만 자 를 수 있 습 니 다.사각형 그림 과 평행 으로 컴 파일 되 지 않 는 그림 을 줄 여야 한다 면 이 블 로 그 를 참고 하여 진일보 한 개선 을 진행 하 십시오클릭 하여 입장)
재단 부분 은 주로 아래 코드 에 따라 진행 되 는데 여기 서 기억 해 야 합 니 다.
파라미터 tr[1]:왼쪽 상단 또는 오른쪽 상단 의 세로 좌표 값
파라미터 bl[1]:왼쪽 아래 또는 오른쪽 아래 의 세로 좌표 값
파라미터 tl[0]:왼쪽 상단 또는 왼쪽 하단 의 가로 좌표 값
파라미터 br[0]:오른쪽 상단 또는 오른쪽 하단 의 가로 좌표 값

 crop = img[int(tr[1]):int(bl[1]), int(tl[0]):int(br[0]) ]
在这里插入图片描述
전체 프로그램 코드 는 다음 과 같다.

import numpy as np
import cv2


def np_list_int(tb):
    tb_2 = tb.tolist() # np     
    return tb_2


def shot(img, dt_boxes):#   predict_det.py ,  dt_boxes         ,     
    dt_boxes = np_list_int(dt_boxes)
    boxes_len = len(dt_boxes)
    num = 0
    while 1:
        if (num < boxes_len):
            box = dt_boxes[num]
            tl = box[0]
            tr = box[1]
            br = box[2]
            bl = box[3]
            print("        num =" + str(num))
            print("tl:" + str(tl), "tr:" + str(tr), "br:" + str(br), "bl:" + str(bl))
            print(tr[1],bl[1], tl[0],br[0])


            crop = img[int(tr[1]):int(bl[1]), int(tl[0]):int(br[0]) ]

            
            # crop = img[27:45, 67:119] #  
            # crop = img[380:395, 368:119]

            cv2.imwrite("K:/paddleOCR/PaddleOCR/screenshot/a/" + str(num) + ".jpg", crop)

            num = num + 1
        else:
            break


def shot1(img_path,tl, tr, br, bl,i):
    tl = np_list_int(tl)
    tr = np_list_int(tr)
    br = np_list_int(br)
    bl = np_list_int(bl)

    print("        ")
    print("tl:"+str(tl),"tr:" + str(tr), "br:" + str(br), "bl:"+ str(bl))

    img = cv2.imread(img_path)
    crop = img[tr[1]:bl[1], tl[0]:br[0]]

    # crop = img[27:45, 67:119]

    cv2.imwrite("K:/paddleOCR/PaddleOCR/screenshot/shot/" + str(i) + ".jpg", crop)

# tl1 = np.array([67,27])
# tl2= np.array([119,27])
# tl3 = np.array([119,45])
# tl4 = np.array([67,45])
# shot("K:\paddleOCR\PaddleOCR\screenshot\zong.jpg",tl1, tl2 ,tl3 , tl4 , 0)
특히 np 형식 을 목록 으로 변환 하고,4.567914 의 중간 매개 변수 위치 에 주의 하 십시오.
실례
두 가지 방법 으로 그림 을 저장 하 였 는데,opencv 와 Image 는 opencv 가 매우 빠르다 는 것 을 증명 하 였 다.

from PIL import Image
import os
import cv2
import time
import matplotlib.pyplot as plt
def label2picture(cropImg,framenum,tracker):
    pathnew ="E:\\img2\\"
    # cv2.imshow("image", cropImg)
    # cv2.waitKey(1)
    if (os.path.exists(pathnew + tracker)):
        cv2.imwrite(pathnew + tracker+'\\'+framenum + '.jpg', cropImg,[int(cv2.IMWRITE_JPEG_QUALITY), 100])
 
    else:
        os.makedirs(pathnew + tracker)
        cv2.imwrite(pathnew + tracker+'\\'+framenum + '.jpg', cropImg,[int(cv2.IMWRITE_JPEG_QUALITY), 100])
 
f = open("E:\\hypotheses.txt","r")
lines = f.readlines()
for line in lines:
    li  = line.split(',')
    print(li[0],li[1],li[2],li[3],li[4],li[5])
    filename = li[0]+'.jpg'
    img = cv2.imread("E:\\DeeCamp\\img1\\" + filename)
    crop_img = img[int(li[3][:-3]):(int(li[3][:-3]) + int(li[5][:-3])),
               int(li[2][:-3]):(int(li[2][:-3]) + int(li[4][:-3]))]
    # print(int(li[2][:-3]),int(li[3][:-3]),int(li[4][:-3]),int(li[5][:-3]))
    label2picture(crop_img, li[0], li[1])
# #
# x,y,w,h = 87,158,109,222
# img = cv2.imread("E:\\DeeCamp\\img1\\1606.jpg")
# # print(img.shape)
# crop = img[y:(h+y),x:(w+x)]
# cv2.imshow("image", crop)
# cv2.waitKey(0)
# img = Image.open("E:\\DeeCamp\\img1\\3217.jpg")
#
# cropImg = img.crop((x,y,x+w,y+h))
# cropImg.show()
    # img = Image.open("E:\\deep_sort-master\\MOT16\\train\\try1\\img1\\"+filename)
    # print(int(li[2][:-3]),(int(li[2][:-3])+int(li[4][:-3])), int(li[3][:-3]),(int(li[3][:-3])+int(li[5][:-3])))
 
    # #    
    # # cropImg = img.crop(region)
    # # cropImg.show()
    # framenum ,tracker= li[0],li[1]
    # pathnew = 'E:\\DeeCamp\\deecamp  \\deep_sort-master\\crop_picture\\'
    # if (os.path.exists(pathnew + tracker)):
    #     #         
    #     plt.imshow(cropImg)
    #     plt.savefig(pathnew + tracker+'\\'+framenum + '.jpg')
    # else:
    #     os.makedirs(pathnew + tracker)
    #     plt.imshow(cropImg)
    #     plt.savefig(pathnew + tracker+'\\'+framenum + '.jpg')
python opencv 가 4 좌 표를 통 해 그림 을 자 르 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 opencv 편집 그림 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기