最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python opencv實(shí)現(xiàn)圖片旋轉(zhuǎn)矩形分割

 更新時(shí)間:2018年07月26日 09:33:26   作者:Imcy  
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖片旋轉(zhuǎn)矩形分割,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

有時(shí)候需要對(duì)有角度的矩形框內(nèi)圖像從原圖片中分割出來(lái)。這里的程序思想是,先將圖片進(jìn)行矩形角度的旋轉(zhuǎn),使有角度的矩形處于水平狀態(tài)后,根據(jù)原來(lái)坐標(biāo)分割圖片。
參考:python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能

修改原來(lái)的程序:

1.旋轉(zhuǎn)函數(shù)的輸入僅為矩形的四點(diǎn)坐標(biāo)
2.角度由公式計(jì)算出來(lái)
3.矩形四點(diǎn)pt1,pt2,pt3,pt4由txt文件讀入
4.在旋轉(zhuǎn)程序中還處理了順時(shí)針和逆時(shí)針及出現(xiàn)矩形框翻轉(zhuǎn)的問(wèn)題。

代碼:

# -*- 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 "順時(shí)針旋轉(zhuǎn)"
  else:
    print "逆時(shí)針旋轉(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)后圖像的四點(diǎ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ù)四點(diǎn)畫(huà)原矩形
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+"http://rawLabel//"+imageName[:7]+last # txt文件名
  getTxt=open(fileTxt, 'r') # 打開(kāi)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)

原帶角度的矩形框:

旋轉(zhuǎn)矩形框:

分割:

這里寫(xiě)圖片描述

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flask自定義序列化超詳細(xì)講解

    Flask自定義序列化超詳細(xì)講解

    序列化其實(shí)就是將數(shù)據(jù)轉(zhuǎn)化成一種可逆的數(shù)據(jù)結(jié)構(gòu),自然,逆向的過(guò)程就叫做反序列化。php將數(shù)據(jù)序列化和反序列化會(huì)用到兩個(gè)函數(shù):serialize 將對(duì)象格式化成有序的字符串、unserialize 將字符串還原成原來(lái)的對(duì)象
    2022-11-11
  • Python實(shí)現(xiàn)語(yǔ)音識(shí)別Whisper的使用示例

    Python實(shí)現(xiàn)語(yǔ)音識(shí)別Whisper的使用示例

    Whisper是由OpenAI基于Python開(kāi)發(fā)的能夠識(shí)別多國(guó)語(yǔ)言的語(yǔ)音識(shí)別模型,本文主要介紹了Python實(shí)現(xiàn)語(yǔ)音識(shí)別Whisper的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 如何在Python 游戲中模擬引力

    如何在Python 游戲中模擬引力

    這篇文章主要介紹了在你的 Python 游戲中模擬引力的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python批量啟動(dòng)多線程代碼實(shí)例

    Python批量啟動(dòng)多線程代碼實(shí)例

    這篇文章主要介紹了python批量啟動(dòng)多線程代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python爬蟲(chóng) 正則表達(dá)式使用技巧及爬取個(gè)人博客的實(shí)例講解

    python爬蟲(chóng) 正則表達(dá)式使用技巧及爬取個(gè)人博客的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇python爬蟲(chóng) 正則表達(dá)式使用技巧及爬取個(gè)人博客的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Python讀取Excel數(shù)據(jù)實(shí)現(xiàn)批量生成PPT

    Python讀取Excel數(shù)據(jù)實(shí)現(xiàn)批量生成PPT

    我們常常面臨著大量的重復(fù)性工作,通過(guò)人工方式處理往往耗時(shí)耗力易出錯(cuò)。而Python在辦公自動(dòng)化方面具有天然優(yōu)勢(shì)。本文將利用讀取Excel數(shù)據(jù)并實(shí)現(xiàn)批量生成PPT,需要的可以參考一下
    2022-05-05
  • 使用Python對(duì)mongo數(shù)據(jù)庫(kù)中字符串型正負(fù)數(shù)值比較大小

    使用Python對(duì)mongo數(shù)據(jù)庫(kù)中字符串型正負(fù)數(shù)值比較大小

    這篇文章主要介紹了使用Python對(duì)mongo數(shù)據(jù)庫(kù)中字符串型正負(fù)數(shù)值比較大小,
    2023-04-04
  • 解決keras,val_categorical_accuracy:,0.0000e+00問(wèn)題

    解決keras,val_categorical_accuracy:,0.0000e+00問(wèn)題

    這篇文章主要介紹了解決keras,val_categorical_accuracy:,0.0000e+00問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 關(guān)于Python核心框架tornado的異步協(xié)程的2種方法詳解

    關(guān)于Python核心框架tornado的異步協(xié)程的2種方法詳解

    今天小編就為大家分享一篇關(guān)于Python核心框架tornado的異步協(xié)程的2種方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 關(guān)于python線程池的四種實(shí)現(xiàn)方式

    關(guān)于python線程池的四種實(shí)現(xiàn)方式

    這篇文章主要介紹了關(guān)于python線程池的四種實(shí)現(xiàn)方式,一個(gè)程序運(yùn)行起來(lái)后,一定有一個(gè)執(zhí)行代碼的東西,這個(gè)東西就是線程,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

仁寿县| 霍林郭勒市| 安溪县| 临猗县| 大埔区| 邛崃市| 句容市| 东丰县| 济宁市| 土默特右旗| 安龙县| 惠安县| 黔东| 明溪县| 胶州市| 疏附县| 东光县| 连山| 和政县| 东海县| 肥东县| 苏尼特左旗| 晋中市| 庄浪县| 西盟| 六枝特区| 荣成市| 平山县| 洛川县| 团风县| 高要市| 湘乡市| 灯塔市| 民勤县| 新龙县| 武宣县| 青浦区| 施秉县| 临漳县| 汝阳县| 新民市|