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

python四個坐標點對圖片區(qū)域最小外接矩形進行裁剪

 更新時間:2021年06月04日 10:49:58   作者:亂世流星01  
在圖像裁剪操作中,opencv和pillow兩個庫都具有相應的函數(shù),如果想要對目標的最小外接矩形進行裁剪該如何操作呢?本文就來詳細的介紹一下

在圖像裁剪操作中,opencv和pillow兩個庫都具有相應的函數(shù),但是這兩個庫中的函數(shù)僅僅能對與圖片平行的矩形進行裁剪操作,如果想要對目標的最小外接矩形進行裁剪該如何操作呢?如下所示:

具體處理該問題的思路如下:

  • 計算最小外接矩形的四個點的坐標,旋轉(zhuǎn)角度
  • 將原圖像進行旋轉(zhuǎn),旋轉(zhuǎn)角度為最小外接矩形的角度
  • 將四個點的坐標進行映射,求出被旋轉(zhuǎn)后圖像的四個點的坐標
  • 利用這四個點對圖像進行裁剪

圖像原圖如下:

1 求出該區(qū)域的最小外接矩形,并且得到外接矩形的四個點的坐標和旋轉(zhuǎn)角度。

rect = cv2.minAreaRect(self.contours[0])#rect為[(旋轉(zhuǎn)中心x坐標,旋轉(zhuǎn)中心y坐標),(矩形長,矩形寬),旋轉(zhuǎn)角度]
box_origin = cv2.boxPoints(rect)#box_origin為[(x0,y0),(x1,y1),(x2,y2),(x3,y3)]

2 將原圖像進行旋轉(zhuǎn),旋轉(zhuǎn)角度為最小外接矩形的角度,由于防止旋轉(zhuǎn)后目標區(qū)域在圖像外面,所以我將圖像大小擴大為原來的2倍。

M = cv2.getRotationMatrix2D(rect[0],rect[2],1)
dst = cv2.warpAffine(rotateimg,M,(2*rotateimg.shape[0],2*rotateimg.shape[1]))

3 將原四個點的坐標做映射,映射到旋轉(zhuǎn)后的區(qū)域,得到新的四個點的坐標。

#逆時針旋轉(zhuǎn)
def Nrotate(angle,valuex,valuey,pointx,pointy):
      angle = (angle/180)*math.pi
      valuex = np.array(valuex)
      valuey = np.array(valuey)
      nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
      nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
      return (nRotatex, nRotatey)
#順時針旋轉(zhuǎn)
def Srotate(angle,valuex,valuey,pointx,pointy):
      angle = (angle/180)*math.pi
      valuex = np.array(valuex)
      valuey = np.array(valuey)
      sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
      sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
      return (sRotatex,sRotatey)
#將四個點做映射
def rotatecordiate(angle,rectboxs,pointx,pointy):
      output = []
      for rectbox in rectboxs:
        if angle>0:
          output.append(Srotate(angle,rectbox[0],rectbox[1],pointx,pointy))
        else:
          output.append(Nrotate(-angle,rectbox[0],rectbox[1],pointx,pointy))
      return output
box = rotatecordiate(rect[2],box_origin,rect[0][0],rect[0][1])

4 利用四個點坐標進行裁剪,如2中圖所示,圖像經(jīng)過旋轉(zhuǎn)后已經(jīng)變?yōu)楹蛨D片沒有旋轉(zhuǎn)角的圖像,經(jīng)過實驗觀察旋轉(zhuǎn)后的坐標還是有細微差別,但誤差已經(jīng)在千分點甚至萬分點左右,對我們裁剪造成的影響可以忽略不計。

def imagecrop(image,box):
      xs = [x[1] for x in box]
      ys = [x[0] for x in box]
      print(xs)
      print(min(xs),max(xs),min(ys),max(ys))
      cropimage = image[min(xs):max(xs),min(ys):max(ys)]
      print(cropimage.shape)
      cv2.imwrite('cropimage.png',cropimage)
      return cropimage
imagecrop(dst,np.int0(box))

到此,利用4個坐標點對圖像進行裁剪操作已經(jīng)完成。

到此這篇關(guān)于python四個坐標點對圖片區(qū)域最小外接矩形進行裁剪的文章就介紹到這了,更多相關(guān)python 圖片坐標裁剪內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python調(diào)用REST API接口的幾種方式匯總

    Python調(diào)用REST API接口的幾種方式匯總

    這篇文章主要介紹了Python調(diào)用REST API接口的幾種方式匯總,幫助大家更好的利用python進行自動化運維,感興趣的朋友可以了解下
    2020-10-10
  • Python?迭代器Iterator詳情

    Python?迭代器Iterator詳情

    這篇文章主要介紹了Python?迭代器Iterator詳情,迭代器可以幫助我們解決面對復雜的數(shù)據(jù)場景時,快速簡便的獲取數(shù)據(jù),下文關(guān)于其詳細介紹,需要的小伙伴可以參考一下
    2022-05-05
  • python 字典中取值的兩種方法小結(jié)

    python 字典中取值的兩種方法小結(jié)

    今天小編就為大家分享一篇python 字典中取值的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Python封裝解構(gòu)以及丟棄變量

    Python封裝解構(gòu)以及丟棄變量

    這篇文章主要介紹了Python封裝解構(gòu)以及丟棄變量,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Python實現(xiàn)經(jīng)典算法拓撲排序、字符串匹配算法和最小生成樹實例

    Python實現(xiàn)經(jīng)典算法拓撲排序、字符串匹配算法和最小生成樹實例

    這篇文章主要介紹了Python實現(xiàn)經(jīng)典算法拓撲排序、字符串匹配算法和最小生成樹實例,拓撲排序、字符串匹配算法和最小生成樹是計算機科學中常用的數(shù)據(jù)結(jié)構(gòu)和算法,它們在解決各種實際問題中具有重要的應用價值,需要的朋友可以參考下
    2023-08-08
  • 解決numpy和torch數(shù)據(jù)類型轉(zhuǎn)化的問題

    解決numpy和torch數(shù)據(jù)類型轉(zhuǎn)化的問題

    這篇文章主要介紹了解決numpy和torch數(shù)據(jù)類型轉(zhuǎn)化的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python調(diào)用虹軟2.0第三版的具體使用

    python調(diào)用虹軟2.0第三版的具體使用

    這篇文章主要介紹了python調(diào)用虹軟2.0第三版的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • python3?queue多線程通信

    python3?queue多線程通信

    這篇文章主要介紹了python3?queue多線程通信,??Queue???對象已經(jīng)包含了必要的鎖,所以你可以通過它在多個線程間多安全地共享數(shù)據(jù),更多相關(guān)內(nèi)容需要的朋友可以參考一下下文文章內(nèi)容
    2022-07-07
  • Python+Dlib+Opencv實現(xiàn)人臉采集并表情判別功能的代碼

    Python+Dlib+Opencv實現(xiàn)人臉采集并表情判別功能的代碼

    這篇文章主要介紹了Python+Dlib+Opencv實現(xiàn)人臉采集并表情判別,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 基于Python的A*算法解決八數(shù)碼問題實現(xiàn)步驟

    基于Python的A*算法解決八數(shù)碼問題實現(xiàn)步驟

    這篇文章主要給大家介紹了關(guān)于如何基于Python的A*算法解決八數(shù)碼問題的實現(xiàn)步驟,文中介紹了八數(shù)碼問題及其求解方法,通過啟發(fā)式搜索算法,特別是A*算法,可以有效地解決八數(shù)碼問題,,需要的朋友可以參考下
    2024-11-11

最新評論

平阳县| 高安市| 濮阳县| 乌苏市| 宣化县| 额尔古纳市| 岳西县| 台北市| 武胜县| 峨边| 西峡县| 灵宝市| 偃师市| 朝阳县| 汕尾市| 济宁市| 建德市| 左贡县| 沁水县| 舒城县| 枝江市| 城市| 莆田市| 盘山县| 白沙| 武强县| 九寨沟县| 巴青县| 洱源县| 贡觉县| 江油市| 怀化市| 吉林市| 辽源市| 阿拉善盟| 博客| 通化县| 富蕴县| 汶上县| 龙口市| 通渭县|