python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能
本文實(shí)例為大家分享了python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減的具體代碼,供大家參考,具體內(nèi)容如下
經(jīng)常遇見旋轉(zhuǎn)矩形框的裁減問題,那么思路是,將矩形框旋轉(zhuǎn)正然后再裁減
# -*- coding:gb2312 -*- import cv2 from math import * import numpy as np import time def rotateImage(img,degree,pt1,pt2,pt3,pt4): height,width=img.shape[:2] heightNew = int(width * fabs(sin(radians(degree))) + height * fabs(cos(radians(degree)))) widthNew = int(height * fabs(sin(radians(degree))) + width * fabs(cos(radians(degree)))) matRotation=cv2.getRotationMatrix2D((width/2,height/2),degree,1) matRotation[0, 2] += (widthNew - width) / 2 matRotation[1, 2] += (heightNew - height) / 2 imgRotation = cv2.warpAffine(img, matRotation, (widthNew, heightNew), borderValue=(255, 255, 255)) pt1 = list(pt1) pt3 = list(pt3) [[pt1[0]], [pt1[1]]] = np.dot(matRotation, np.array([[pt1[0]], [pt1[1]], [1]])) [[pt3[0]], [pt3[1]]] = np.dot(matRotation, np.array([[pt3[0]], [pt3[1]], [1]])) imgOut=imgRotation[int(pt1[1]):int(pt3[1]),int(pt1[0]):int(pt3[0])] cv2.imshow("imgOut",imgOut) #裁減得到的旋轉(zhuǎn)矩形框 cv2.imwrite("imgOut.jpg",imgOut) # pt2 = list(pt2) # pt4 = list(pt4) # [[pt2[0]], [pt2[1]]] = np.dot(matRotation, np.array([[pt2[0]], [pt2[1]], [1]])) # [[pt4[0]], [pt4[1]]] = np.dot(matRotation, np.array([[pt4[0]], [pt4[1]], [1]])) # pt1 = (int(pt1[0]), int(pt1[1])) # pt2 = (int(pt2[0]), int(pt2[1])) # pt3 = (int(pt3[0]), int(pt3[1])) # pt4 = (int(pt4[0]), int(pt4[1])) # drawRect(imgRotation,pt1,pt2,pt3,pt4,(255,0,0),2) return imgRotation def drawRect(img,pt1,pt2,pt3,pt4,color,lineWidth): cv2.line(img, pt1, pt2, color, lineWidth) cv2.line(img, pt2, pt3, color, lineWidth) cv2.line(img, pt3, pt4, color, lineWidth) cv2.line(img, pt1, pt4, color, lineWidth) if __name__=="__main__": startTime=time.time() imgSrc=cv2.imread('E:\桌面\lena.jpg') imgResize=cv2.resize(imgSrc,(500,500)) pt1=(100,100) pt2=(150,50) pt3=(175,75) pt4=(125,125) # drawRect(imgResize,pt1,pt2,pt3,pt4,(0,0,255),2) imgRotation=rotateImage(imgResize,-degrees(atan2(50,50)),pt1,pt2,pt3,pt4) endTime = time.time() print endTime-startTime cv2.imshow("imgRotation",imgRotation) cv2.imwrite("imgRotation.jpg",imgRotation) cv2.waitKey(0)
效果圖:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決json.decoder.JSONDecodeError: Expecting value:&n
這篇文章主要介紹了解決json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)錯誤,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04Python Django實(shí)現(xiàn)layui風(fēng)格+django分頁功能的例子
今天小編就為大家分享一篇Python Django實(shí)現(xiàn)layui風(fēng)格+django分頁功能的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python數(shù)據(jù)可視化 pyecharts實(shí)現(xiàn)各種統(tǒng)計圖表過程詳解
這篇文章主要介紹了Python數(shù)據(jù)可視化 pyecharts實(shí)現(xiàn)各種統(tǒng)計圖表過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08Python中創(chuàng)建字典的幾種方法總結(jié)(推薦)
下面小編就為大家?guī)硪黄狿ython中創(chuàng)建字典的幾種方法總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04pandas中的數(shù)據(jù)去重處理的實(shí)現(xiàn)方法
這篇文章主要介紹了pandas中的數(shù)據(jù)去重處理的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python通用驗(yàn)證碼識別OCR庫ddddocr的安裝使用教程
dddd_ocr是一個用于識別驗(yàn)證碼的開源庫,又名帶帶弟弟ocr,下面這篇文章主要給大家介紹了關(guān)于Python通用驗(yàn)證碼識別OCR庫ddddocr的安裝使用教程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07python 實(shí)現(xiàn)單一數(shù)字取對數(shù)與數(shù)列取對數(shù)
這篇文章主要介紹了python 實(shí)現(xiàn)單一數(shù)字取對數(shù)與數(shù)列取對數(shù)操作,具有很好的參考價值,希望對大家有所幫助。2021-05-05