網站首頁 編程語言 正文
今天小編來和大家分享一下Python
在圖像處理當中的具體應用,那既然是圖像處理,那必然要提到opencv
模塊了,該模塊支持與計算機視覺和機器學習相關的眾多算法,并且應用領域正在日益擴展,大致有以下幾種領域
- 物體識別:通過視覺以及內部存儲來進行物體的判斷
- 圖像分割
- 人臉識別
- 汽車安全駕駛
- 人機交互
- 等等
當然這次小編并不打算將這么高深的內容,今天就從最基本的opencv
模塊在圖像的基本操作上說起
模塊的安裝
模塊的安裝我們通過都是通過pip
命令來進行的
pip install opencv-python pip install opencv-contrib-python
圖片的各種操作
學過線性代數的肯定懟矩陣并不感到陌生。圖像本質上來說就是矩陣,灰度圖像是一個普通的矩陣,而彩色圖像就是一個多維矩陣,我們對于圖像的操作可以自然地轉換成是對矩陣的操作
讀取圖像
首先我們先來讀取圖像,調用的是cv2.imread()
方法,它的語法格式如下
cv2.imread(filename, flag=1)
其中的flag
參數是用來設置讀取圖像的格式,默認的是1,表示為按照RGB三通道的格式來進行讀取,如果設置成0,則表示以灰度圖單通道的方式來進行讀取,
import cv2 import numpy as np img=cv2.imread('1.jpg', 0)
展示圖像
cv2.imshow(name,?img)
其參數解釋分別如下:
- name: 表示的是展示窗口的名字
- img: 圖片的矩陣形式
我們嘗試將上面讀取的圖片展示出來,代碼如下
cv2.imshow("grey_img", img) ## 如果使用了cv2.imshow()函數,下面一定要跟著一個摧毀窗口的函數 cv2.destroyAllWindows()
當我們運行了上述的代碼之后,可以發現在一瞬間當中圖片彈了出來,但是還沒有等我們看清楚圖片的樣子之后就直接關閉了,原因在于cv2.imshow()
函數方法并沒有延時的作用,我們添加一個延時的函數,代碼如下
import cv2 import numpy as np img = cv2.imread('1.jpg') cv2.imshow("grey_img", img) cv2.waitKey(0) cv2.destroyAllWindows()
output
圖片保存
最后我們將圖片保存下來,這里用到的函數是cv2.imwrite()
,它的語法格式如下
cv2.imwrite(imgname,?img)
其參數解釋分別如下:
- 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()
圖片的各種屬性
有時候我們想要知道圖片的像素大小,而圖片的本質是矩陣,例如一張1024像素*960像素的圖片,就意味著在矩陣當中的行數就是960行,列數是1024列,在opencv
模塊當中調用的shape()
函數方法,代碼如下
import cv2 img = cv2.imread('1.jpg') print(img.shape[0]) # 行數 print(img.shape[1]) # 列數 print(img.shape[2]) # 通道數
output
308
340
3
可以看到該圖片的像素是340*380,通道數是3,而針對灰度圖像而言,我們來看一下圖片的屬性,代碼如下
img?=?cv2.imread('1_grey.png',?0) print(img.shape)
output
(308,?340)
可以看到對于灰度圖像而言,我們就沒有看到通道數,只有行數和列數
圖像的基本操作
最后我們來對圖像進行一些基本操作,無非就是改變當中的一些像素值,我們導入一張空白的圖片,通過修改當中的像素值來往里面添加一個黑點,代碼如下
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
原文鏈接:https://mp.weixin.qq.com/s/XkYcZxyNWyy-dSsFk_NE_w
相關推薦
- 2023-07-25 使用線程池異步執行定時任務
- 2022-06-12 Pandas對CSV文件讀寫操作詳解_python
- 2022-05-10 torch.cuda.is_available()返回false最終解決方案
- 2022-07-11 CentOS 7安裝SQL Server 2019
- 2022-01-16 1.把字符串轉化為時間戳,再將時間戳轉化為Date對象 /** *@parame time = 2
- 2024-01-29 Linux信號量以及基于環形隊列的生產者消費者模型
- 2023-06-13 Python?Beautiful?Soup模塊使用教程詳解_python
- 2022-07-22 對稱式加密與非對稱式加密的對比
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支