日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

python3 opencv_Python3 OpenCV3 图像处理基础

發(fā)布時(shí)間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 opencv_Python3 OpenCV3 图像处理基础 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

開發(fā)環(huán)境搭建

本人使用的是Ubuntu 16.04LTS。

1、安裝Python3

## 其實(shí) Ubuntu 16.04 系統(tǒng)自帶了 Python 3.5.2,因此不需要再安裝了?但是需要安裝一些開發(fā)環(huán)境。

sudo apt-get update #更新系統(tǒng)源

sudo apt-get install python3 python3.5-dev libpython3.5-dev #安裝基礎(chǔ)包

sudo apt-get install python3-pip #安裝 pip3

sudo pip3 install --upgrade pip #更新 pip3

## 測(cè)試

$ python3 --version

Python3.5.2

2、安裝Numpy,Matplotlib,OpenCV

這些庫(kù)可以自己下載源碼編譯,也有別人編譯好的,我們直接下載。

## 安裝庫(kù)

sudo pip3 install numpy #安裝 numpy,用于在Python中進(jìn)行科學(xué)計(jì)算

sudo pip3 install matplotlib #安裝 matplotlib,用于顯示、繪圖等sudo pip3 install opencv-python #安裝 opencv

sudo pip3 install opencv-contrib-python #安裝opencv-contrib,包含一些其它庫(kù),比如xfeature2d

## 確保 OpenCV 已經(jīng)安裝好

$ python3 -c "import cv2;print(cv2.__version__)"

4.0.0

其實(shí)在安裝opencv-python時(shí)會(huì)附帶安裝numpy,matplotlib安裝時(shí)也會(huì)附帶numpy,因?yàn)樗鼈兌家蕾囉趎umpy,如圖:

至此,環(huán)境基本上已經(jīng)搭建結(jié)束。以后的任務(wù)就是開發(fā)啦。

附:

#各個(gè)版本號(hào)

python 2.7.12python33.5.2pip8.1.1pip319.0.3numpy1.16.1matplotlib3.0.2opencv-python 4.0.0.12

Numpy的使用

Numpy 是 Python中的科學(xué)計(jì)算工具包,可以說是Python中的Matlab。支持向量操作、切片操作、廣播,支持多種常用數(shù)據(jù)類型,內(nèi)置豐富的線性代數(shù)、矩陣算法。由于底層使用多為C語言實(shí)現(xiàn),所以有著較快速度。同時(shí)以使用Python接口可以方便地使用 Python 的語法,擺脫靜態(tài)語言的臃腫,從而實(shí)現(xiàn)快速建模、計(jì)算和驗(yàn)證。

(1) numpy.ndarray 數(shù)組的創(chuàng)建

## --- 創(chuàng)建 np.ndarray 數(shù)組 ----

importnumpy as np#使用 Python list 創(chuàng)建

mat1 = np.array([[1,2,3], [4,5,6], [7,8,9]])#使用 np.arange 創(chuàng)建

mat2= np.arange(1,10).reshape(3,3)#使用 zeros/ones/eye 創(chuàng)建

mat3 = np.zeros((3,3))

mat4= np.ones((3,3))

mat5= np.eye(3)print(mat1)print(mat2)print(mat3)print(mat4)print(mat5)

(2) numpy.ndarray 的數(shù)據(jù)類型

## --- numpy 數(shù)據(jù)類型(默認(rèn) np.int64 或 np.float64) -----#內(nèi)置多種數(shù)據(jù)類型,如 np.uint8, np.int32, np.float32, np.float64

a = np.array([[1.25, -16],[32,264.75]], np.float32) #32位浮點(diǎn)型

b = np.array(a, np.int32) #32位整形

c = b.astype("uint8") #8位無符號(hào)整型(注意會(huì)發(fā)生溢出)

print(a)"""[[ 1.25 -16. ]

[ 32. 264.75]]"""

print(b)"""[[ 1 -16]

[ 32 264]]"""

print(c)"""[[1 2 3]

[4 5 6]

[7 8 9]]"""

(3) 索引

## ----- 索引(單坐標(biāo)、切片、掩模) ------

mat = np.arange(1,10).reshape(3,3)print(mat)## 單坐標(biāo)

print(mat[2][2]) #9

print(mat[2,2]) #9

## 切片操作

print(mat[:2,:2])"""[[1 2]

[4 5]]"""

## 掩模操作

mask = mat>5

print(mask)"""[[False False False]

[False False True]

[ True True True]]"""mat[mask]= 5

print(mat)"""[[1 2 3]

[4 5 5]

[5 5 5]]"""

(4) 廣播 (broadcasting)

## ----- numpy 廣播機(jī)制(broadcasting) ------#https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html#當(dāng)操作兩個(gè) numpy.ndarray 數(shù)組時(shí),如果它們的維度滿足一定的關(guān)系,則可以進(jìn)行廣播操作。

x = np.arange(4) #(4,)

xt = x.reshape(-1,1) #(4,1)

z = np.ones((3,4)) #(3,4)

print(x+xt)"""[[0 1 2 3]

[1 2 3 4]

[2 3 4 5]

[3 4 5 6]]"""

print(x+z)"""[[ 1. 2. 3. 4.]

[ 1. 2. 3. 4.]

[ 1. 2. 3. 4.]]"""

Matplotlib

[Matplotlib](http://matplotlib.org/) 是 Python 中的可視化庫(kù),可以用來繪制高質(zhì)量的 2D 折線圖、散點(diǎn)圖、柱狀圖,或者用來顯示圖像。分別參考

#使用 matplotlib 繪制一些列縮略圖(thumbnails),并顯示圖像#from scipy.misc import imread, imresize

importmatplotlib.pyplot as pltimportmatplotlib.image as mpimgimportnumpy as np## (1) 繪制隨機(jī)噪點(diǎn)## 初始化隨機(jī)種子,并生成隨機(jī)坐標(biāo)

np.random.seed(0)

data= np.random.randn(2, 100)## 創(chuàng)建畫布

fig, axs = plt.subplots(2, 2, figsize=(5, 5))## 繪制子圖

axs[0, 0].hist(data[0])

axs[1, 0].scatter(data[0], data[1])

axs[0,1].plot(data[0], data[1])

axs[1, 1].hist2d(data[0], data[1])## 顯示

plt.show()## (2) 繪制圖像

img = mpimg.imread("/home/auss/Pictures/test.png")

imgx= img[:,:,0] #取第一個(gè)通道

## 創(chuàng)建畫布

fig =plt.figure()## 繪制原始圖像,并加上顏色條

axs = fig.add_subplot(1,3,1)

ipt=plt.imshow(img)

axs.set_title("origin")

plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')## 繪制偽彩色圖像,并加上顏色條

axs = fig.add_subplot(1,3,2)

ipt= plt.imshow(imgx,cmap="winter")

axs.set_title("winter")

plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')## 繪制直方圖

axs = fig.add_subplot(1,3,3)

ipt= plt.hist(imgx.ravel(), bins=256, range=(0, 1.0), fc='k', ec='k')

axs.set_title("histogram")

plt.show()

OpenCV的簡(jiǎn)單應(yīng)用

鋪墊了這么久,終于到了 OpenCV 了。 OpenCV 的 Python 接口名稱為 cv2。通常 OpenCV 內(nèi)部的算法已經(jīng)很豐富了,并且提供了 highgui 模塊用于顯示圖像(不過可能有的沒有編譯該模塊)。如果需要進(jìn)行拓展,則可以配合著 Numpy 進(jìn)行計(jì)算,并結(jié)合 Matplotlib 進(jìn)行顯示。

注意,matplotlib 中圖像通道為 RGB,而 OpenCV 中圖像通道為 BGR。因此進(jìn)行顯示的時(shí)候,要注意交換通道的順序。

這里給出一個(gè) Canny 邊緣檢測(cè)的例子,涉及到圖像讀寫、色彩空間轉(zhuǎn)換、濾波、Canny邊緣檢測(cè)、掩模賦值操作等。

#!/usr/bin/python3#2017.11.02 17:31:24 CST#2017.11.02 17:51:13 CST

importcv2importnumpy as np

img= cv2.imread("firefox.png")## BGR => Gray; 高斯濾波; Canny 邊緣檢測(cè)

gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

gaussed= cv2.GaussianBlur(gray, (3,3), 0)

cannyed= cv2.Canny(gaussed, 10, 220)## 將灰度邊緣轉(zhuǎn)化為BGR

cannyed2 =cv2.cvtColor(cannyed, cv2.COLOR_GRAY2BGR)## 創(chuàng)建彩色邊緣

mask = cannyed > 0 #邊緣掩模

canvas = np.zeros_like(img) #創(chuàng)建畫布

canvas[mask] = img[mask] #賦值邊緣

## 保存

res = np.hstack((img, cannyed2, canvas)) #組合在一起

cv2.imwrite("result.png", res)        #保存

## 顯示

cv2.imshow("canny in opencv", res)#保持10s, 等待按鍵響應(yīng)(超時(shí)或按鍵則進(jìn)行下一步)

key = 0xFF & cv2.waitKey(1000*10)if key in (ord('Q'), ord('q'), 27):## 這部分用作演示用

print("Exiting...")## 銷毀窗口

cv2.destroyAllWindows()

總結(jié)

以上是生活随笔為你收集整理的python3 opencv_Python3 OpenCV3 图像处理基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。