這篇文章主要介紹了怎么在python中利用opencv對矩形進(jìn)行分割,創(chuàng)新互聯(lián)小編覺得不錯,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨創(chuàng)新互聯(lián)小編來看看吧!
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)慈利免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。Python主要用來做什么Python主要應(yīng)用于:1、Web開發(fā);2、數(shù)據(jù)科學(xué)研究;3、網(wǎng)絡(luò)爬蟲;4、嵌入式應(yīng)用開發(fā);5、游戲開發(fā);6、桌面應(yīng)用開發(fā)。
代碼:
# -*- coding:utf-8 -*- import cv2 from math import * import numpy as np import time,math import os import re '''旋轉(zhuǎn)圖像并剪裁''' def rotate( img, # 圖片 pt1, pt2, pt3, pt4 ): print pt1,pt2,pt3,pt4 withRect = math.sqrt((pt4[0] - pt1[0]) ** 2 + (pt4[1] - pt1[1]) ** 2) # 矩形框的寬度 heightRect = math.sqrt((pt1[0] - pt2[0]) ** 2 + (pt1[1] - pt2[1]) **2) print withRect,heightRect angle = acos((pt4[0] - pt1[0]) / withRect) * (180 / math.pi) # 矩形框旋轉(zhuǎn)角度 print angle if pt4[1]>pt1[1]: print "順時針旋轉(zhuǎn)" else: print "逆時針旋轉(zhuǎn)" angle=-angle height = img.shape[0] # 原始圖像高度 width = img.shape[1] # 原始圖像寬度 rotateMat = cv2.getRotationMatrix2D((width / 2, height / 2), angle, 1) # 按angle角度旋轉(zhuǎn)圖像 heightNew = int(width * fabs(sin(radians(angle))) + height * fabs(cos(radians(angle)))) widthNew = int(height * fabs(sin(radians(angle))) + width * fabs(cos(radians(angle)))) rotateMat[0, 2] += (widthNew - width) / 2 rotateMat[1, 2] += (heightNew - height) / 2 imgRotation = cv2.warpAffine(img, rotateMat, (widthNew, heightNew), borderValue=(255, 255, 255)) cv2.imshow('rotateImg2', imgRotation) cv2.waitKey(0) # 旋轉(zhuǎn)后圖像的四點坐標(biāo) [[pt1[0]], [pt1[1]]] = np.dot(rotateMat, np.array([[pt1[0]], [pt1[1]], [1]])) [[pt3[0]], [pt3[1]]] = np.dot(rotateMat, np.array([[pt3[0]], [pt3[1]], [1]])) [[pt2[0]], [pt2[1]]] = np.dot(rotateMat, np.array([[pt2[0]], [pt2[1]], [1]])) [[pt4[0]], [pt4[1]]] = np.dot(rotateMat, np.array([[pt4[0]], [pt4[1]], [1]])) # 處理反轉(zhuǎn)的情況 if pt2[1]>pt4[1]: pt2[1],pt4[1]=pt4[1],pt2[1] if pt1[0]>pt3[0]: pt1[0],pt3[0]=pt3[0],pt1[0] imgOut = imgRotation[int(pt2[1]):int(pt4[1]), int(pt1[0]):int(pt3[0])] cv2.imshow("imgOut", imgOut) # 裁減得到的旋轉(zhuǎn)矩形框 cv2.waitKey(0) return imgRotation # rotated image ?!「鶕?jù)四點畫原矩形 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) # 讀出文件中的坐標(biāo)值 def ReadTxt(directory,imageName,last): fileTxt=directory+"//rawLabel//"+imageName[:7]+last # txt文件名 getTxt=open(fileTxt, 'r') # 打開txt文件 lines = getTxt.readlines() length=len(lines) for i in range(0,length,4): pt2=list(map(float,lines[i].split(' ')[:2])) pt1=list(map(float,lines[i+1].split(' ')[:2])) pt4=list(map(float,lines[i+2].split(' ')[:2])) pt3=list(map(float,re.split('\n| ',lines[i+3])[:2])) # float轉(zhuǎn)int pt2=list(map(int,pt2)) pt1=list(map(int,pt1)) pt4=list(map(int,pt4)) pt3=list(map(int,pt3)) imgSrc = cv2.imread(imageName) drawRect(imgSrc, tuple(pt1),tuple(pt2),tuple(pt3),tuple(pt4), (0, 0, 255), 2) cv2.imshow("img", imgSrc) cv2.waitKey(0) rotate(imgSrc,pt1,pt2,pt3,pt4) if __name__=="__main__": directory = "G://grasp//grapCode//trainImage//jpg//4" last = 'cneg.txt' imageName="pcd0247r.png" ReadTxt(directory,imageName,last)
以上就是創(chuàng)新互聯(lián)小編為大家收集整理的怎么在python中利用opencv對矩形進(jìn)行分割,如何覺得創(chuàng)新互聯(lián)網(wǎng)站的內(nèi)容還不錯,歡迎將創(chuàng)新互聯(lián)網(wǎng)站推薦給身邊好友。
文章名稱:怎么在python中利用opencv對矩形進(jìn)行分割-創(chuàng)新互聯(lián)
路徑分享:http://jinyejixie.com/article14/dipige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、App設(shè)計、Google、網(wǎng)站設(shè)計公司、用戶體驗、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容