99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀當(dāng)Python也來進(jìn)行修圖神器,發(fā)現(xiàn)是真的蠻好用的呢
當(dāng)Python也來進(jìn)行修圖神器,發(fā)現(xiàn)是真的蠻好用的呢
2022-07-11
收藏

作者:俊欣

來源:關(guān)于數(shù)據(jù)分析與可視化

今天小編來和大家分享一下Python圖像處理當(dāng)中的具體應(yīng)用,那既然是圖像處理,那必然要提到opencv模塊了,該模塊支持與計(jì)算機(jī)視覺機(jī)器學(xué)習(xí)相關(guān)的眾多算法,并且應(yīng)用領(lǐng)域正在日益擴(kuò)展,大致有以下幾種領(lǐng)域

  • 物體識別:通過視覺以及內(nèi)部存儲來進(jìn)行物體的判斷
  • 圖像分割
  • 人臉識別
  • 汽車安全駕駛
  • 人機(jī)交互
  • 等等

當(dāng)然這次小編并不打算將這么高深的內(nèi)容,今天就從最基本的opencv模塊在圖像的基本操作上說起

模塊的安裝

模塊的安裝我們通過都是通過pip命令來進(jìn)行的

pip install opencv-python pip install opencv-contrib-python 

圖片的各種操作

學(xué)過線性代數(shù)的肯定懟矩陣并不感到陌生。圖像本質(zhì)上來說就是矩陣,灰度圖像是一個(gè)普通的矩陣,而彩色圖像就是一個(gè)多維矩陣,我們對于圖像的操作可以自然地轉(zhuǎn)換成是對矩陣的操作

讀取圖像

首先我們先來讀取圖像,調(diào)用的是cv2.imread()方法,它的語法格式如下

cv2.imread(filename, flag=1)

其中的flag參數(shù)是用來設(shè)置讀取圖像的格式,默認(rèn)的是1,表示為按照RGB三通道的格式來進(jìn)行讀取,如果設(shè)置成0,則表示以灰度圖單通道的方式來進(jìn)行讀取,

import cv2 import numpy as np
img=cv2.imread('1.jpg', 0)

展示圖像

在讀取圖片之后,我們希望能夠?qū)⑵湔故境鰜?,這里用到的函數(shù)方法是cv2.imshow(),它的語法格式如下所示

cv2.imshow(name, img)

其參數(shù)解釋分別如下:

  • name: 表示的是展示窗口的名字
  • img: 圖片的矩陣形式

我們嘗試將上面讀取的圖片展示出來,代碼如下

cv2.imshow("grey_img", img)
## 如果使用了cv2.imshow()函數(shù),下面一定要跟著一個(gè)摧毀窗口的函數(shù) cv2.destroyAllWindows()

當(dāng)我們運(yùn)行了上述的代碼之后,可以發(fā)現(xiàn)在一瞬間當(dāng)中圖片彈了出來,但是還沒有等我們看清楚圖片的樣子之后就直接關(guān)閉了,原因在于cv2.imshow()函數(shù)方法并沒有延時(shí)的作用,我們添加一個(gè)延時(shí)的函數(shù),代碼如下

import cv2 import numpy as np

img = cv2.imread('1.jpg')
cv2.imshow("grey_img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

output

當(dāng)Python也來進(jìn)行修圖神器,發(fā)現(xiàn)是真的蠻好用的呢

圖片保存

最后我們將圖片保存下來,這里用到的函數(shù)是cv2.imwrite(),它的語法格式如下

cv2.imwrite(imgname, img)

其參數(shù)解釋分別如下:

  • imgname: 要保存的圖片的名字
  • img: 圖片的矩陣形式

示例代碼如下

import cv2 import numpy as np

img = cv2.imread('1.jpg')
cv2.imshow("grey_img", img)
cv2.waitKey(0)
cv2.imwrite('1.png', img)
cv2.destroyAllWindows()

圖片的各種屬性

有時(shí)候我們想要知道圖片的像素大小,而圖片的本質(zhì)是矩陣,例如一張1024像素*960像素的圖片,就意味著在矩陣當(dāng)中的行數(shù)就是960行,列數(shù)是1024列,在opencv模塊當(dāng)中調(diào)用的shape()函數(shù)方法,代碼如下

import cv2

img = cv2.imread('1.jpg') print(img.shape[0]) # 行數(shù) print(img.shape[1]) # 列數(shù) print(img.shape[2]) # 通道數(shù) 

output

308 340 3 

可以看到該圖片的像素是340*380,通道數(shù)是3,而針對灰度圖像而言,我們來看一下圖片的屬性,代碼如下

img = cv2.imread('1_grey.png', 0) print(img.shape)

output

(308, 340) 

可以看到對于灰度圖像而言,我們就沒有看到通道數(shù),只有行數(shù)和列數(shù)

圖像的基本操作

最后我們來對圖像進(jìn)行一些基本操作,無非就是改變當(dāng)中的一些像素值,我們導(dǎo)入一張空白的圖片,通過修改當(dāng)中的像素值來往里面添加一個(gè)黑點(diǎn),代碼如下

import cv2 import numpy as np

img = cv2.imread('2.jpg')
(x, y, z) = img.shape for i in range(-10, 10): for j in range(-10, 10):
        # 圖片的正中心的位置來改變像素值,
        img[int(x/2) + i, int(y/2) + j] = (0, 0, 0)

cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

output

當(dāng)Python也來進(jìn)行修圖神器,發(fā)現(xiàn)是真的蠻好用的呢

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }