亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Python圖片處理之圖片裁剪教程

Python圖片處理之圖片裁剪教程

熱門標簽:手機網頁嵌入地圖標注位置 河北防封卡電銷卡 400電話辦理哪種 電銷機器人的風險 開封語音外呼系統代理商 開封自動外呼系統怎么收費 天津電話機器人公司 地圖標注線上如何操作 應電話機器人打電話違法嗎

一、操作流程

首先復制代碼會吧?

1.有張照片

這是網上隨便找的一張照片,自行保存測試

2.看看照片

運行代碼,其中show_img函數是展示照片

3.選擇角點

按照左上,右上,右下,左下的順序選擇四個角點

如果擔心自己選不好,可以直接去除我代碼里的points的注釋,那是我自己用的原版

4.最終結果

二、代碼分析

import 沒什么好說的

#如果python沒有安裝cv2,那么就安裝python-opencv就好
import cv2 as cv
import numpy as np

獲取圖片的長寬

#輸入cv.imread后的圖片,通過點擊四個點選擇要裁剪的部分
def get_window_size(src, bound=600):
    h,w = src.shape[0], src.shape[1]
    if h > w:
        h, w = bound, int(w*bound/h)
    else:
        h, w = int(h*bound/w), bound
    return (h, w)

通過鼠標獲取圖片的坐標點,順序是左上,右上,右下,左下

class Indexer:
    def __init__(self, bound=4):
        self.id = 0
        self.bound = bound

    def get_id(self):
        self.id = (self.id + 1)
        return (self.id)


def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    if event == cv.EVENT_LBUTTONDOWN:
        img = param['src']
        win_name = param['window']
        indexer = param['indexer']
        points = param['points']

        curr_id = indexer.get_id()
        points.append((x, y))
        print('第{}個頂點: ({},{})'.format(curr_id, x, y))

        cv.circle(img, (x, y), 10, (0, 0, 255), thickness=2)
        cv.putText(
            img,
            str(curr_id),  # 文字
            (x, y),  # 坐標
            cv.FONT_HERSHEY_PLAIN,
            5,  # 字號
            (0, 0, 255),  # 字體顏色
            thickness=2  # 粗細
        )

        cv.imshow(win_name, img)

#輸入cv.imread后的圖片,通過點擊四個點選擇要裁剪的部分
def get_points(src):
    points = []
    indexer = Indexer()
    h, w=get_window_size(src)
    win_name = 'get_points'
    cv.namedWindow(win_name, cv.WINDOW_NORMAL)
    cv.resizeWindow(win_name, width=w, height=h)
    cv.imshow(win_name, src)
    cv.setMouseCallback(win_name, on_EVENT_LBUTTONDOWN,
                        param={'src': src, 'window': win_name, 'indexer': indexer, 'points': points})
    cv.waitKey(0)
    cv.destroyAllWindows()
    if len(points)>4:
        return points[0:4]
    # print(points)
    # points=[(2, 14), (90, 50), (87, 194), (1, 204)]
    return points

#輸入cv.imread后的圖片,展示圖片長什么樣
def show_img(src):
    win_name = 'show_img'
    h, w=get_window_size(src)
    cv.namedWindow(win_name, cv.WINDOW_NORMAL)
    cv.resizeWindow(win_name, width=w, height=h)
    cv.imshow(win_name, src)
    cv.waitKey(0)
    cv.destroyAllWindows()

將圖片截取,并按照指定的長寬比恢復成矩形

def photo_cut_restore(src,points,H,W):

    target_points = [(0, 0), (W, 0), (W, H), (0, H)]
    points, target_points = np.array(points, dtype=np.float32), np.array(target_points, dtype=np.float32)
    M = cv.getPerspectiveTransform(points, target_points)
    # print('透視變換矩陣:', M)

    result = cv.warpPerspective(src_copy, M, (0, 0))
    result = result[:H, :W]
    win_name = 'Result'
    cv.namedWindow(win_name, cv.WINDOW_NORMAL)
    cv.resizeWindow(win_name, width=W, height=H)
    cv.imshow(win_name,result)
    cv.waitKey(0)
    cv.destroyAllWindows()
    return  result

主程序

if __name__ == '__main__':

    path = './1.jpg'
    src = cv.imread(path)
    src_copy = src.copy()

     show_img(src)


    W = 20
    H = 20
    # points=[(112, 308), (175, 310), (176, 369), (113, 369)]
    
    points=get_points(src)
    n = 20
    W = int(W * n)
    H = int(H * n)

    result=photo_cut_restore(src_copy,points,H,W)

    output_file = 'result.jpg'
    cv.imwrite(output_file, result)

三、懶人一鍵復制代碼

誒,氣不氣,好不容易一段段復制完,結果最后居然有一鍵復制的地方

import cv2 as cv
import numpy as np

#輸入cv.imread后的圖片,通過點擊四個點選擇要裁剪的部分
def get_window_size(src, bound=600):
    h,w = src.shape[0], src.shape[1]
    if h > w:
        h, w = bound, int(w*bound/h)
    else:
        h, w = int(h*bound/w), bound
    return (h, w)


class Indexer:
    def __init__(self):
        self.id = 0

    def get_id(self):
        self.id = (self.id + 1)
        return (self.id)


def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    if event == cv.EVENT_LBUTTONDOWN:
        img = param['src']
        win_name = param['window']
        indexer = param['indexer']
        points = param['points']

        curr_id = indexer.get_id()
        points.append((x, y))
        print('第{}個頂點: ({},{})'.format(curr_id, x, y))

        cv.circle(img, (x, y), 10, (0, 0, 255), thickness=2)
        cv.putText(
            img,
            str(curr_id),  # 文字
            (x, y),  # 坐標
            cv.FONT_HERSHEY_PLAIN,
            5,  # 字號
            (0, 0, 255),  # 字體顏色
            thickness=2  # 粗細
        )

        cv.imshow(win_name, img)

#輸入cv.imread后的圖片,通過點擊四個點選擇要裁剪的部分
def get_points(src):
    points = []
    indexer = Indexer()
    h, w=get_window_size(src)
    win_name = 'get_points'
    cv.namedWindow(win_name, cv.WINDOW_NORMAL)
    cv.resizeWindow(win_name, width=w, height=h)
    cv.imshow(win_name, src)
    cv.setMouseCallback(win_name, on_EVENT_LBUTTONDOWN,
                        param={'src': src, 'window': win_name, 'indexer': indexer, 'points': points})
    cv.waitKey(0)
    cv.destroyAllWindows()
    if len(points)>4:
        return points[0:4]
    # print(points)
    # points=[(2, 14), (90, 50), (87, 194), (1, 204)]
    return points

#輸入cv.imread后的圖片,展示圖片長什么樣
def show_img(src):
    win_name = 'show_img'
    h, w=get_window_size(src)
    cv.namedWindow(win_name, cv.WINDOW_NORMAL)
    cv.resizeWindow(win_name, width=w, height=h)
    cv.imshow(win_name, src)
    cv.waitKey(0)
    cv.destroyAllWindows()

def photo_cut_restore(src,points,H,W):

    target_points = [(0, 0), (W, 0), (W, H), (0, H)]
    points, target_points = np.array(points, dtype=np.float32), np.array(target_points, dtype=np.float32)
    M = cv.getPerspectiveTransform(points, target_points)
    # print('透視變換矩陣:', M)

    result = cv.warpPerspective(src_copy, M, (0, 0))
    result = result[:H, :W]
    win_name = 'Result'
    cv.namedWindow(win_name, cv.WINDOW_NORMAL)
    cv.resizeWindow(win_name, width=W, height=H)
    cv.imshow(win_name,result)
    cv.waitKey(0)
    cv.destroyAllWindows()
    return  result


if __name__ == '__main__':

    path = './3.jpg'
    src = cv.imread(path)
    src_copy = src.copy()

    # show_img(src)


    W = 20
    H = 20
    # points=[(124, 182), (181, 177), (180, 243), (125, 266)]
    points=get_points(src)
    print(points)
    n = 20
    W = int(W * n)
    H = int(H * n)

    result=photo_cut_restore(src_copy,points,H,W)

    output_file = 'result.jpg'
    cv.imwrite(output_file, result)

到此這篇關于Python圖片處理之圖片裁剪教程的文章就介紹到這了,更多相關Python圖片裁剪內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python圖像處理之圖片拼接和堆疊案例教程
  • python圖片灰度化處理的幾種方法
  • Python圖像處理之圖像拼接
  • Python圖片檢索之以圖搜圖
  • python圖片合成的示例
  • 昨晚我用python幫隔壁小姐姐P證件照然后發現

標簽:常州 宿遷 成都 駐馬店 六盤水 江蘇 山東 蘭州

巨人網絡通訊聲明:本文標題《Python圖片處理之圖片裁剪教程》,本文關鍵詞  Python,圖片,處理,之,裁剪,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python圖片處理之圖片裁剪教程》相關的同類信息!
  • 本頁收集關于Python圖片處理之圖片裁剪教程的相關信息資訊供網民參考!
  • 推薦文章
    色综合久久天天综合观看| 久久福利影视| 中文字幕一区二区三区精彩视频 | 久久国产精品永久免费网站| 成人av在线播放| 久久精品大片| 欧美爱色| 999久久狠狠免费精品| 亚欧成人毛片一区二区三区四区| 天天做日日干| 九九免费高清在线观看视频| 国产亚洲精品aaa大片| 精品毛片视频| 你懂的日韩| 成人免费一级纶理片| 日本特黄特黄aaaaa大片| 99久久精品国产片| 国产一区二区福利久久| 久久久久久久久综合影视网| 亚欧成人毛片一区二区三区四区| 国产福利免费视频| 亚洲第一页乱| 欧美一级视频免费| 精品久久久久久中文| 韩国毛片基地| 日本特黄特色aa大片免费| 国产高清视频免费| 欧美一区二区三区在线观看 | 精品久久久久久中文字幕一区| 国产一区二区精品在线观看| 91麻豆高清国产在线播放| 四虎影视库| 日本免费看视频| 精品国产一区二区三区久久久狼| 四虎影视久久| 美国一区二区三区| 亚洲 欧美 91| 美国一区二区三区| 一级毛片视频在线观看| 四虎影视精品永久免费网站| 国产成+人+综合+亚洲不卡| 九九久久国产精品| 久久99欧美| 99久久精品国产高清一区二区| 久久久久久久久综合影视网| 黄色福利片| 精品久久久久久中文| 韩国毛片免费大片| 国产视频一区二区在线观看| 日本特黄特黄aaaaa大片| 国产一区免费观看| 国产高清在线精品一区二区| 欧美日本韩国| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美日本二区| 欧美一级视频免费| 91麻豆国产级在线| 青草国产在线| 麻豆网站在线免费观看| 九九久久99综合一区二区| 久久国产影院| 久久精品人人做人人爽97| 欧美激情伊人| 日韩在线观看视频黄| 国产精品自拍亚洲| 欧美a级成人淫片免费看| 欧美爱色| 精品国产一区二区三区久 | 韩国三级香港三级日本三级| 色综合久久久久综合体桃花网| 国产福利免费观看| 国产精品免费久久| 九九热国产视频| 韩国毛片免费大片| 久久国产一区二区| 久久精品欧美一区二区| 免费一级生活片| 人人干人人草| 久久精品欧美一区二区| 国产a毛片| 国产极品白嫩美女在线观看看| 欧美另类videosbestsex高清| 欧美大片一区| 一级毛片视频在线观看| 久久国产影院| 国产亚洲男人的天堂在线观看| 国产精品123| 日本在线不卡免费视频一区| 国产成人精品在线| 麻豆网站在线看| 欧美激情一区二区三区在线| 国产一区二区精品久久91| 91麻豆国产级在线| 久久国产影视免费精品| 日本乱中文字幕系列| 亚洲第一页乱| a级黄色毛片免费播放视频| 麻豆网站在线看| 国产成人啪精品| 精品久久久久久中文字幕2017| 国产综合成人观看在线| 青青久久精品| 国产视频一区在线| 午夜在线亚洲| 四虎论坛| 麻豆网站在线看| 天天做人人爱夜夜爽2020| 亚洲精品影院久久久久久| 日本伦理片网站| 免费毛片基地| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产麻豆精品高清在线播放| 沈樵在线观看福利| 欧美另类videosbestsex高清| 国产福利免费观看| 国产一区二区精品久久91| 国产高清视频免费观看| 韩国毛片基地| 欧美国产日韩在线| 精品视频在线观看一区二区 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久久久久久久综合影视网| 欧美另类videosbestsex久久| 日日夜人人澡人人澡人人看免| 精品视频在线观看一区二区 | 国产91精品一区二区| 四虎影视久久久| 国产网站免费在线观看| 久久国产影院| 天天做日日爱夜夜爽| 九九免费高清在线观看视频| 高清一级做a爱过程不卡视频| 免费国产在线观看| 国产麻豆精品| 夜夜操天天爽| 欧美激情一区二区三区视频高清| 欧美国产日韩一区二区三区| 久草免费资源| 黄视频网站在线免费观看| 日本伦理片网站| 99热热久久| 毛片成人永久免费视频| 九九热国产视频| 欧美国产日韩一区二区三区| 成人a大片高清在线观看| 国产精品1024永久免费视频| 麻豆系列 在线视频| 国产伦久视频免费观看 视频 | 国产一区二区精品| 韩国三级香港三级日本三级la| 一级毛片视频免费| 国产亚洲精品aaa大片| 国产视频一区二区在线播放| 国产麻豆精品高清在线播放| 人人干人人草| 久久久久久久网| 一本伊大人香蕉高清在线观看| 国产网站麻豆精品视频| 久草免费在线观看| 国产亚洲免费观看| 国产91精品系列在线观看| 国产麻豆精品视频| 日本在线不卡免费视频一区| 91麻豆国产级在线| 日本在线www| 香蕉视频一级| 精品国产亚洲人成在线| 国产亚洲精品成人a在线| 韩国三级一区| 国产高清在线精品一区二区| 成人高清视频免费观看| 国产不卡精品一区二区三区| 国产伦精品一区三区视频| 久久国产一区二区| 国产91丝袜在线播放0| 999精品视频在线| 国产麻豆精品视频| 国产精品自拍在线观看| 欧美激情影院| 国产成人啪精品| 精品久久久久久免费影院| 久久福利影视| 天天色成人| 精品久久久久久中文字幕2017| 成人影视在线播放| 久久久成人影院| 韩国三级视频在线观看| 黄视频网站免费观看| 日韩专区一区| 国产网站免费视频| 欧美大片毛片aaa免费看| 国产极品白嫩美女在线观看看| 在线观看导航| 日韩中文字幕在线播放| 99热热久久| 精品视频在线看| 精品毛片视频| 四虎影视库| 国产视频网站在线观看| 国产综合91天堂亚洲国产|