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

python實(shí)現(xiàn)根據(jù)坐標(biāo)將圖片進(jìn)行裁剪

 更新時(shí)間:2025年11月10日 09:18:55   作者:NO1212  
這篇文章主要為大家詳細(xì)介紹了如何使用python實(shí)現(xiàn)根據(jù)坐標(biāo)將圖片進(jìn)行裁剪,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

功能:

1.給一個(gè)圖片,并給出圖片中所有目標(biāo)的坐標(biāo)

2.將圖中給出的坐標(biāo)用框給標(biāo)注出來

3.經(jīng)典需求,通常稱為“閱讀順序排序”或“Z字排序”。你需要先按行(從上到下)排序,在同一行內(nèi)再按列(從左到右)排序。將排完序的多個(gè)框進(jìn)行編號(hào)

4.對(duì)目標(biāo)框進(jìn)行裁圖

完整代碼:

import cv2
import numpy as np
import os


def test():
    path = "D:\LAELAOI\Test"
    pointtxt = os.path.join(path, "label_position.txt")
    with open(pointtxt, 'r')as f:
        content = f.readlines()
    print(content)
    boxes = []
    for i in content:
        parts = i.split(',')
        file = parts[0]
        x1, x2, y1, y2 = parts[2],parts[3],parts[4],parts[5].strip()
        print(file, x1, y1, x2, y2)
        boxes.append([x1, y1, x2, y2])
    # 進(jìn)行排序
    # key=lambda box: (int(box[1]), int(box[0])) 表示:
    #   1. 先按 box 的第 1 個(gè)元素(y1)進(jìn)行升序排序(從上到下)
    #   2. 如果 y1 相同,再按第 0 個(gè)元素(x1)進(jìn)行升序排序(從左到右)
    #   3. int() 是為了將字符串轉(zhuǎn)為數(shù)字,確保正確排序
    sorted_boxes = sorted(boxes, key=lambda box: (int(box[1]), int(box[0])))
    img = cv2.imread(r"D:\LAELAOI\Test\L_main_CAM_basler.jpg")
    # img = cv2.resize(img, (1500, 1000))
    copy_img = img.copy()
    # 遍歷排序后的列表,進(jìn)行編號(hào)(從1開始)
    # for index, box in enumerate(sorted_boxes, 1):
    #     x1, x2, y1, y2 = int(box[0]), int(box[1]), int(box[2]), int(box[3])
    #     cv2.rectangle(copy_img,(int(box[0]),int(box[1])), (int(box[2]),int(box[3])), (0,0, 255), 2)
    #     print(f"編號(hào): {index}, 坐標(biāo): {box}")



    # --- 主要修改和新增的邏輯在這里 ---
    for index, box in enumerate(sorted_boxes, 1):
        # 1. 將字符串坐標(biāo)轉(zhuǎn)換為整數(shù)
        x1, y1, x2, y2 = map(int, box)

        # 2. 【關(guān)鍵修復(fù)】確保坐標(biāo)順序正確,防止計(jì)算負(fù)數(shù)半徑
        # 重新計(jì)算左上角和右下角坐標(biāo),確保 x1 <= x2, y1 <= y2
        top_left_x = min(x1, x2)
        top_left_y = min(y1, y2)
        bottom_right_x = max(x1, x2)
        bottom_right_y = max(y1, y2)

        # 3. 繪制矩形框(使用修正后的坐標(biāo))
        cv2.rectangle(copy_img, (top_left_x, top_left_y), (bottom_right_x, bottom_right_y), (0, 0, 255), 2)

        # --- 新增代碼開始 ---
        # 4. 計(jì)算矩形中心點(diǎn)
        center_x = (top_left_x + bottom_right_x) // 2
        center_y = (top_left_y + bottom_right_y) // 2

        # 7. 在圓圈中心寫入編號(hào)
        font = cv2.FONT_HERSHEY_SIMPLEX
        text = str(index)
        # 計(jì)算文字大小,以便居中
        (text_width, text_height), baseline = cv2.getTextSize(text, font, 1, 2)

        # 計(jì)算文字的坐標(biāo),使其在圓圈內(nèi)居中
        text_x = center_x - text_width // 2
        text_y = center_y + text_height // 2

        # 繪制文字
        # 參數(shù):圖像, 文字, 坐標(biāo), 字體, 大小, 顏色(白色), 粗細(xì)
        cv2.putText(copy_img, text, (text_x, text_y), font, 10, (0, 0, 255), 3)
        # --- 新增代碼結(jié)束 ---

        print(f"編號(hào): {index}, 原始坐標(biāo): {box}, 修正后坐標(biāo): {[top_left_x, top_left_y, bottom_right_x, bottom_right_y]}")
        cropped_img = img[y1:y2, x1:x2]
        savefile = r"D:\LAELAOI\Test\{}.jpg".format(index)
        print(savefile)
        cv2.imwrite(savefile, cropped_img)
    cv2.imwrite(r"D:\LAELAOI\Test\1111L_main_CAM_basler.jpg", copy_img)
    cv2.imshow('rr', copy_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
if __name__ == '__main__':
    test()

效果圖:

到此這篇關(guān)于python實(shí)現(xiàn)根據(jù)坐標(biāo)將圖片進(jìn)行裁剪的文章就介紹到這了,更多相關(guān)python圖片裁剪內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用Paramiko模塊編寫腳本進(jìn)行遠(yuǎn)程服務(wù)器操作

    Python使用Paramiko模塊編寫腳本進(jìn)行遠(yuǎn)程服務(wù)器操作

    這篇文章主要介紹了Python使用Paramiko模塊編寫腳本進(jìn)行遠(yuǎn)程服務(wù)器操作的實(shí)例,通過Paramiko能夠方便地使用SSH服務(wù),需要的朋友可以參考下
    2016-05-05
  • Python流程控制常用工具詳解

    Python流程控制常用工具詳解

    這篇文章主要介紹了Python流程控制常用工具詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 解讀python如何實(shí)現(xiàn)決策樹算法

    解讀python如何實(shí)現(xiàn)決策樹算法

    在本篇文章里我們給讀者們分享了關(guān)于python如何實(shí)現(xiàn)決策樹算法的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。
    2018-10-10
  • Django rest framework工具包簡(jiǎn)單用法示例

    Django rest framework工具包簡(jiǎn)單用法示例

    這篇文章主要介紹了Django rest framework工具包簡(jiǎn)單用法,結(jié)合匿名訪問控制的具體實(shí)例分析了Django rest framework工具包的注冊(cè)、路由設(shè)置、視圖、權(quán)限控制、配置等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn)

    python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn)

    這篇文章主要介紹了python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python中str、bytes、十六進(jìn)制字符串之間的相互轉(zhuǎn)換方法

    python中str、bytes、十六進(jìn)制字符串之間的相互轉(zhuǎn)換方法

    這篇文章主要介紹了在Python中字符串(str)、字節(jié)序列(bytes)以及十六進(jìn)制字符串之間的轉(zhuǎn)換方法,包括如何使用.encode()、.decode()、bytes.fromhex()和.hex()方法進(jìn)行轉(zhuǎn)換,需要的朋友可以參考下
    2025-03-03
  • Scipy稀疏矩陣bsr_array的使用

    Scipy稀疏矩陣bsr_array的使用

    本文主要介紹了Scipy稀疏矩陣bsr_array的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python+html文字點(diǎn)選驗(yàn)證碼加固安全防線

    python+html文字點(diǎn)選驗(yàn)證碼加固安全防線

    這篇文章主要為大家介紹了python文字點(diǎn)選驗(yàn)證碼加固安全防線實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Python如何同時(shí)讀寫Excel

    Python如何同時(shí)讀寫Excel

    這篇文章主要介紹了Python如何同時(shí)讀寫Excel問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python 決策樹算法的實(shí)現(xiàn)

    python 決策樹算法的實(shí)現(xiàn)

    這篇文章主要介紹了python 決策樹算法的實(shí)現(xiàn),幫助大家更好的理解和使用python 機(jī)器學(xué)習(xí)算法,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論

天峻县| 山东省| 邓州市| 赣州市| 会东县| 江永县| 益阳市| 和林格尔县| 莒南县| 修水县| 大方县| 铁岭县| 大英县| 闸北区| 拉孜县| 辉县市| 阿荣旗| 马尔康县| 江阴市| 汉川市| 阿鲁科尔沁旗| 平顶山市| 汾阳市| 盐边县| 尼勒克县| 桦南县| 吴江市| 山西省| 乌拉特中旗| 兴国县| 沧州市| 栾川县| 天全县| 理塘县| 临安市| 河间市| 江北区| 额济纳旗| 石景山区| 延吉市| 石林|