婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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圖片處理之圖片裁剪教程的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品白丝在线| 国产白丝网站精品污在线入口| 欧美成人激情免费网| 日韩精品中文字幕一区二区三区| 色综合av在线| 日韩精品在线网站| 国产女主播在线一区二区| 国产精品一卡二卡| 亚洲国产毛片aaaaa无费看 | 99re在线精品| 国产乱国产乱300精品| 亚洲一区二三区| 一区二区三区四区在线| 自拍偷拍欧美激情| 亚洲综合色网站| 中文字幕在线不卡国产视频| 亚洲已满18点击进入久久| 喷白浆一区二区| 欧美三级日韩在线| 久久精品亚洲一区二区三区浴池| 一区二区三区四区在线| 激情久久五月天| 一本到不卡精品视频在线观看 | 懂色av一区二区夜夜嗨| 精品国产乱码久久久久久老虎| 欧美三电影在线| 久久众筹精品私拍模特| 自拍av一区二区三区| 成人免费高清在线观看| 亚洲一区二区3| 精品噜噜噜噜久久久久久久久试看| 亚洲成人免费在线观看| 久久精品理论片| 欧美一级高清片| 日韩国产精品91| 欧美一级片在线观看| 午夜成人在线视频| 欧美三级蜜桃2在线观看| 亚洲三级在线观看| 欧美主播一区二区三区美女| 国产精品理论在线观看| 北条麻妃一区二区三区| 亚洲免费在线播放| 91极品美女在线| 视频一区在线播放| 欧美日韩国产片| 日本亚洲天堂网| 91精品国产一区二区| 尤物av一区二区| 欧美日韩中文国产| 亚洲18色成人| 韩国女主播一区| 91精品国产麻豆| 美日韩一区二区| 精品久久久久99| 欧美激情一二三区| 97久久精品人人做人人爽50路| 中文子幕无线码一区tr| 色哟哟一区二区| 美女视频免费一区| 欧美一级日韩不卡播放免费| 国产一区二区久久| 国产精品久久久久久妇女6080| 91欧美一区二区| 男人操女人的视频在线观看欧美| av在线不卡免费看| 亚洲成人av免费| 亚洲国产成人在线| 欧美日本高清视频在线观看| 久久精品久久精品| 91福利在线观看| 蜜臀a∨国产成人精品| 欧美极品另类videosde| 欧美一区二区三区视频| 国产成人久久精品77777最新版本| 亚洲欧美日韩久久精品| 国产欧美日韩精品一区| 欧美一级久久久| 国产真实乱偷精品视频免| 亚洲激情男女视频| 国产精品久久久久久久久图文区| 色婷婷国产精品综合在线观看| 久久国产精品72免费观看| 亚洲最新视频在线观看| 国产精品视频九色porn| 精品国产凹凸成av人网站| 欧美在线一二三| 91色九色蝌蚪| 欧美午夜一区二区三区| 色拍拍在线精品视频8848| 国产在线视频不卡二| 乱一区二区av| 成人午夜av影视| 国产 欧美在线| 欧美午夜精品一区| 91精品国产免费久久综合| 精品国产一区二区三区不卡| 欧美一区二区在线免费观看| 精品国产欧美一区二区| 久久综合久久综合亚洲| 中文字幕av资源一区| 亚洲欧美日韩国产综合在线| 五月综合激情日本mⅴ| 九九在线精品视频| 91视频国产资源| 91.com视频| 国产精品美女久久福利网站| 午夜在线成人av| 国产99一区视频免费| 91黄色小视频| 欧美哺乳videos| 极品少妇xxxx精品少妇偷拍| 国产在线精品免费av| 91精品办公室少妇高潮对白| 久久综合久久99| 午夜精品久久久久久久久久久| eeuss国产一区二区三区| 欧美va在线播放| 美女mm1313爽爽久久久蜜臀| 欧美三级电影在线看| 亚洲国产一区二区在线播放| 91在线视频网址| 亚洲视频每日更新| 狠狠色丁香九九婷婷综合五月| 日韩欧美www| 免费一区二区视频| 久久蜜桃av一区二区天堂 | 色94色欧美sute亚洲线路一ni| 日本一区二区动态图| 91女人视频在线观看| 国产视频亚洲色图| av成人免费在线观看| 亚洲人亚洲人成电影网站色| 9久草视频在线视频精品| 一区二区三区免费观看| 欧美老女人第四色| 久久精品国产久精国产爱| 精品美女在线播放| 成人精品高清在线| 亚洲福利电影网| 久久久久久久综合| 91传媒视频在线播放| 日本美女一区二区| 一区二区三区四区不卡视频| 日韩美一区二区三区| 成人白浆超碰人人人人| 美国三级日本三级久久99| 日韩欧美一级特黄在线播放| 成人一区二区三区中文字幕| 亚洲国产视频一区二区| 国产精品美女久久久久久2018 | 成人18视频在线播放| 中文av字幕一区| 精品久久久久久久久久久院品网| 99精品1区2区| 国产在线视频精品一区| 亚洲电影视频在线| 亚洲成av人片在线观看| 国产精品久久久久久久久久免费看| 精品欧美黑人一区二区三区| 91精品国产美女浴室洗澡无遮挡| 精品系列免费在线观看| 日本美女一区二区三区视频| 一区二区三区四区激情| 亚洲国产成人av| 亚洲sss视频在线视频| 亚洲福利视频一区二区| 一卡二卡三卡日韩欧美| 久久九九99视频| 精品国产91乱码一区二区三区| 欧美成人a视频| 国产日韩精品一区二区浪潮av| 精品三级在线看| 国产精品卡一卡二卡三| 亚洲制服丝袜在线| 三级欧美韩日大片在线看| 黄页视频在线91| 国产精品综合av一区二区国产馆| 国产精品一区2区| 欧洲一区二区三区在线| 久久久久国产精品麻豆ai换脸| 欧美激情一区二区三区四区| 亚洲午夜成aⅴ人片| 国产在线看一区| 国产精品1区2区| 一本大道综合伊人精品热热| 欧美视频中文字幕| 国产精品久久久久三级| 国产麻豆精品theporn| 欧美区一区二区三区| 一区二区在线观看免费| caoporen国产精品视频| 中文字幕日韩精品一区| 91在线视频网址| 亚洲成人综合视频| 3d动漫精品啪啪| 国产精品中文字幕日韩精品 | 国产成人在线视频网站| 亚洲精选视频在线| 国产99久久久精品|