好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 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圖片處理之圖片裁剪教程的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 天天天天操| 亚洲精品久久久蜜桃| 国产成人狂喷潮在线观看2345| 在线好吊色视频98gao| 亚洲AV秘?无码一区川村晴| 女朋友的妺妺2| 色吊丝avav色吊丝| 日本黄色电影在线| 男女扒开双腿猛进入gif| 老色鬼久久AV综合亚洲健身| 老汉噗嗤一声整根全进视频| 萌白酱粉嫩jk福利在线观看| 国产免费a级片| 男男gaygays18| 亚洲AV一区二区天天摸日日| 爱丫爱丫在线影院电视剧| 午夜视频在线观看免费| 我的365黑大佬第三部| 国产哺乳奶水91在线播放| 成年片色大黄全免费网址| 久久九九青青国产精品| 啊啊啊啊啊啊啊爽| 一级毛片无遮挡免费全部| 亚洲日韩精品秘?在线观看 | 国产在线观看国偷精品产拍| 边做边尿好爽~H双男主 | 日本午夜精品理论片A级APP发布| 安娜情欲史电影观看| 亚洲一区二区三区在线观看| 嗯灬啊灬把腿张开灬A片动漫 | 更多大片访问| 欧美精产国品一二三类产品特点| 男人午夜免费视频| 免费看黄色毛片| 白白色青青草| 99国产精品人妻无码免费农村| 俺来也俺也啪WWW色| 国产成人精品免费视频大全办公室| 日韩在线综合| 亚洲色大成网站www学生软件| 国产人妻精品一区二区三 |