欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)注出來(lái)

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開(kāi)始)
    # 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)

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

        # 7. 在圓圈中心寫(xiě)入編號(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大數(shù)據(jù)用Numpy Array的原因解讀

    Python大數(shù)據(jù)用Numpy Array的原因解讀

    一個(gè)Numpy數(shù)組由許多值組成,所有值的類型是相同的,Numpy 是Python科學(xué)計(jì)算的一個(gè)核心模塊,本文重點(diǎn)給大家介紹Python大數(shù)據(jù)Numpy Array的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-02-02
  • 用1行Python代碼識(shí)別身份證信息實(shí)例

    用1行Python代碼識(shí)別身份證信息實(shí)例

    這篇文章主要介紹了用1行Python代碼識(shí)別身份證信息實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • python Dijkstra算法實(shí)現(xiàn)最短路徑問(wèn)題的方法

    python Dijkstra算法實(shí)現(xiàn)最短路徑問(wèn)題的方法

    這篇文章主要介紹了python Dijkstra算法實(shí)現(xiàn)最短路徑問(wèn)題的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 淺談pycharm的xmx和xms設(shè)置方法

    淺談pycharm的xmx和xms設(shè)置方法

    今天小編就為大家分享一篇淺談pycharm的xmx和xms設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 關(guān)于 Python json中l(wèi)oad和loads區(qū)別

    關(guān)于 Python json中l(wèi)oad和loads區(qū)別

    這篇文章主要介紹了關(guān)于 Python json中l(wèi)oad和loads區(qū)別,文章也有簡(jiǎn)單的說(shuō)明它們之間的相同點(diǎn),然后詳細(xì)介紹不同點(diǎn),需要的朋友可以參考一下文章的具體內(nèi)容
    2021-11-11
  • 詳細(xì)一文帶你分清Python中的模塊、包和庫(kù)

    詳細(xì)一文帶你分清Python中的模塊、包和庫(kù)

    這篇文章主要介紹了詳細(xì)一文帶你分清Python中的模塊、包和庫(kù),Python?模塊(Module),是一個(gè)?Python?文件,以?.py?結(jié)尾,包含了?Python?對(duì)象定義和Python語(yǔ)句,模塊能定義函數(shù),類和變量,模塊也能包含可執(zhí)行的代碼,需要的朋友可以參考下
    2023-08-08
  • Python match語(yǔ)句的具體使用

    Python match語(yǔ)句的具體使用

    match語(yǔ)句接受一個(gè)表達(dá)式,并將其值與作為一個(gè)或多個(gè)case塊給出的連續(xù)模式進(jìn)行比較,本文主要介紹了Python match語(yǔ)句的具體使用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python如何進(jìn)行時(shí)間處理

    Python如何進(jìn)行時(shí)間處理

    這篇文章主要介紹了Python如何進(jìn)行時(shí)間處理,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Python中4種實(shí)現(xiàn)數(shù)值的交換方式

    Python中4種實(shí)現(xiàn)數(shù)值的交換方式

    這篇文章主要介紹了Python中4種實(shí)現(xiàn)數(shù)值的交換方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Python將運(yùn)行結(jié)果導(dǎo)出為CSV格式的兩種常用方法

    Python將運(yùn)行結(jié)果導(dǎo)出為CSV格式的兩種常用方法

    這篇文章主要給大家介紹了關(guān)于Python將運(yùn)行結(jié)果導(dǎo)出為CSV格式的兩種常用方法,Python生成(導(dǎo)出)csv文件其實(shí)很簡(jiǎn)單,我們一般可以用csv模塊或者pandas庫(kù)來(lái)實(shí)現(xiàn),需要的朋友可以參考下
    2023-07-07

最新評(píng)論