欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?OpenCV的基本使用及相關函數(shù)

 更新時間:2022年05月11日 15:20:14   作者:z丶丶  
這篇文章主要介紹了Python-OpenCV的基本使用和相關函數(shù)介紹,主要包括圖像的讀取保存圖像展示問題,結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

Python-OpenCV環(huán)境的配置看上一篇OpenCV環(huán)境的配置
本篇主要介紹一下OpenCV的基本使用和相關函數(shù)的介紹。
以下所有操作都基于這三個庫:
import cv2
import numpy as np
import matplotlib.pylab as plt

原圖

1、圖像的讀取

import cv2
img = cv2.imread('文件路徑'[,cv2.IMREAD_UNCHANGED])
# 其他參數(shù)
# 以原圖讀取 -cv2.IMREAD_UNCHANGED-默認
# 以灰度圖讀取 -cv2.IMREAD_GRAYSCALE
# 以彩色圖讀取 -cv2.IMREAD_COLOR

2、圖像保存

import cv2
cv2.imwrite('image/gray_test.jpg',img)

3、圖像展示

(1)使用OpenCV自帶的顯示函數(shù)

import cv2
# 可以決定窗口是否可以調(diào)整大小。
# cv2.namedWindow('image', cv2.WINDOW_NORMAL) # 特殊情況
cv2.imshow('顯示窗口的名字',img)
cv2.waitKey(0)
cv2.destroyAllWindows() # 關閉所有窗口
'''
cv2.waitKey(num)函數(shù)的參數(shù)介紹
num<0 按鍵輸入消失
num==0 或不填系數(shù) ,一直不消失
num>0 停滯num秒
'''

(2)使用matplotlib庫實現(xiàn)
不能直接用matplotlib去顯示opencv讀取的圖像,因為opencv讀取的圖像的通道順序是[B,G,R],而matplotlib顯示圖像時圖像的通道順序是[R,G,B]。
解決辦法

import cv2

img = cv2.imread('文件路徑')
# 第一種方法
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 第二種方法
# b, g, r = cv2.split(img)
# img = cv2.merge([r, g, b])

顯示圖像

import cv2
matplotlib.pyplot as plt
img = cv2.imread('文件路徑')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文標簽
# (2,2,1)表示一共可顯示2行2列4個圖像,1表示第一個圖像
plt.subplot(2,2,1), plt.title("圖1") #  plt.axis('off') 關閉坐標軸
plt.imshow(img) # 還可以添加一個參數(shù)cmap='gray'
plt.subplot(2,2,2), plt.title("圖2")
plt.imshow(img)
plt.subplot(2,2,3), plt.title("圖3"), 
plt.imshow(img)
plt.subplot(2,2,4), plt.title("圖4"), 
plt.imshow(img)  
plt.show()

(3)拼接圖像并顯示

import cv2
import numpy as np

# 拼接多個圖片并顯示
img1 = cv2.imread("1.jpg",cv2.IMREAD_UNCHANGED)
img2 = cv2.imread("2.jpg",cv2.IMREAD_UNCHANGED)
# 需要將兩圖片的大小改為一致
# heigh = img1.shape[0] # 高
# width = img1.shape[1] # 寬
img2 = cv2.resize(img2,(img1.shape[1],img1.shape[0]))
res = np.hstack((img1,img2,img2)) # 水平連接
# np.vstack((img1,img2,img2)) # 豎直連接
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

4、獲取圖像屬性

# 獲取BGR圖的高、寬
heigh = img.shape[0] # 高
width = img.shape[1] # 寬
# 獲取BGR圖的高、寬、深度
h,w,d = img.shape
# 獲得圖片大小 h*w 或 h*w*d
img_size = img.size
# 獲得圖片數(shù)據(jù)類型
img.dtype

5、圖像縮放(寬,高)

# 圖片縮放->(200,100)
img2 = cv2.resize(img1, (200, 100)) # (寬,高)
# 按比例縮放->(0.5,1.2)
img2 = cv2.resize(img1, (round(cols * 0.5), round(rows * 1.2)))
# 按比例縮放,參數(shù)版
img2 = cv2.resize(img1, None, fx=1.2, fy=0)

6、在原圖像中獲取某一區(qū)域

# 獲取區(qū)域在原圖中的四個點的位置(x1,y1)(x2,y1)(x1,y2)(x2,y2)
# 圖像高度不變,切割寬度,原圖上開始橫坐標-->原圖上結束橫坐標
# img_x_y = img[高:高,寬:寬]
img_x_y_1 = img[ : , x1(開始橫坐標):x2(結束橫坐標)]
# 圖像寬度不變,切割高度,原圖上開始縱坐標-->原圖上結束縱坐標
img_x_y_2 = img[y1(開始縱坐標):y2(結束縱坐標), : ]
# 獲取具體位置
img_x_y = img[y1(開始縱坐標):y2(結束縱坐標),x1(開始橫坐標):x2(結束橫坐標)]

例如:

import cv2
path = 'C:\\Users\\lenovo\\Desktop\\demo.jpg'
img = cv2.imread(path)
img_1 = img[100:600,200:500]
cv2.imshow('1',img_1)
cv2.waitKey(0)
cv2.destroyAllWindows()

7、彩色圖像通道分解

# 通道分解方案1
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
# 通道分解方案2
b,g,r = cv2.split(img)
# 通道合并
rgb = cv2.merge([r,g,b])
# 只顯示藍色通道
b = cv2.split(a)[0]
g = np.zeros((rows,cols),dtype=a.dtype)
r = np.zeros((rows,cols),dtype=a.dtype)
m = cv2.merge([b,g,r])

8、圖像加法

# 超過255則為0
result1 = img1 + img2
# 超過255則為255
result2 = cv2.add(img1, img2)
# 圖像帶權重融合,第5個參數(shù)為偏移量
result = cv2.addWeighted(img1,0.5,img2,0.5, 0)

9、圖像反轉

img2 = cv2.flip(img1, 0) #上下翻轉
img2 = cv2.flip(img1, 1) #左右翻轉
img2 = cv2.flip(img1, -1) #上下、左右翻轉

10、圖像金字塔

# 圖片向下采樣,高斯濾波 1/2 刪掉偶數(shù)列
img1 = cv2.pyrDown(img)
# 圖片向上采樣 ,面積*2 高斯濾波*4 ,下采樣為不可逆運算
img3 = cv2.pyrUp(img2)
# 計算拉普拉斯金字塔
img1 = cv2.pyrDown(img) #下采樣
img2 = cv2.pyrUp(img1) #上采樣
img3 = img-img2

11、直方圖

##matplotlib 繪制直方圖
plt.hist(img.ravel(),256)
##用opencv計算直方圖列表
hist = cv2.calcHist(images= [img],channels=[0],mask=None,histSize=[256],ranges=[0,255])
##掩膜提取局部直方圖
pad = np.zeros(img.shape,np.uint8)
pad[200:400,200:400]=255
hist_MASK = cv2.calcHist(images= [img],channels=[0],mask=pad,histSize=[256],ranges=[0,255])
##opencv 交、并、補、異或操作
masked_img = cv2.bitwise_and(img,mask)
##直方圖均衡化原理
# 圖像直方圖->直方圖歸一化->累計直方圖->*255 # x坐標映射->對原來的像素值進行新像素值編碼
# 直方圖均衡化調(diào)用
img1 = cv2.equalizeHist(img)
# matplotlib繪制圖片前通道轉換
img_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #通道不一致性
##matplotlib多圖繪制在一個面板上
plt.subplot('2,2,1'),plt.imshow(img,cmap=plt.cm.gray),plt.axis('off'),plt.title('original')
plt.subplot('2,2,2'), plt.imshow(img1, cmap = plt.cm.gray), plt.axis('off')
plt.subplot('2,2,3'), plt.hist(img.ravel(),256)
plt.subplot('2,2,4'), plt.hist(img1.ravel(), 256)

12、圖像類型轉換

# 彩色圖轉灰度圖
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
# BGR圖轉RGB圖(重點:opencv的通道是 藍、綠、紅跟計算機常用的紅、綠、藍通道相反)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
# 灰度圖轉BGR圖,每個通道都是之前的灰度值
img2 = cv2.cvtColor(img1, cv2.COLOR_GRAY2BGR)

13、圖像閾值轉換 、二值化

r,b = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) #圖像二值化,閾值127,r為返回閾值,b為二值圖
r,b = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV) #圖像反二值化
r,b = cv2.threshold(img,127,255,cv2.THRESH_TOZERO) #低于threshold則為0
r,b = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV) #高于threshold則為0
r,b = cv2.threshold(img,127,255,cv2.THRESH_TRUNC) #截斷=>高于threshold則為threshold

14、圖像平滑處理

# 均值濾波
img2 = cv2.blur(img1, (5, 5))  #sum(square)/25
# normalize=1 均值濾波,normalize=0 區(qū)域內(nèi)像素求和
img1 = cv2.boxFilter(img, -1, (2, 2), normalize=1)
# 高斯濾波,第三個參數(shù)是方差,默認0計算公式: sigmaX=sigmaxY=0.3((ksize-1)*0.5-1)+0.8 (注:卷積核只能是奇數(shù))
img1 = cv2.GaussianBlur(img, (3, 3), 0)  #距離像素中心點近的權重較大,以高斯方式往四周分布
# 中值濾波,效果非常好
img1 = cv2.medianBlur(img,3)  #獲得中心點附近像素排序后的中值

15、圖像形態(tài)學操作

(1)圖像腐蝕,k為全為1的卷積核

k = np.ones((5,5),np.uint8)
img1 = cv2.dilate(img, k, iterations=2)

(2)圖像膨脹

k = np.ones((5,5),np.uint8)
img1 = cv2.dilate(img, k, iterations=2)

(3)圖像開運算 (先腐蝕后膨脹),去掉圖形外側噪點

k = np.ones((5,5),np.uint8)
img1 = cv2.morphologyEx(img, cv2.MORPH_OPEN, k, iterations=2)

(4)圖像閉運算(先膨脹后腐蝕) ,去掉圖形內(nèi)側噪點

k = np.ones((5,5),np.uint8)
img1 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, k, iterations=2)
# 高帽運算 (原圖-開運算),獲得圖形外噪點
k=np.ones((5,5),np.uint8)
img1 = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k)
# 黑帽運算(閉運算-原圖),獲得圖像內(nèi)噪點
k = np.ones((10,10),np.uint8)
img1 = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k)

16、圖像梯度,邊緣檢測

import cv2
import matplotlib.pyplot as plt
import numpy as np
# 各種算子
img = cv2.imread('C:\\Users\\lenovo\\Desktop\\demo.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.GaussianBlur(img, (5, 5), 1)  # 高斯平滑
img_median = cv2.medianBlur(img, 3)  # 中值濾波
img_gray = cv2.cvtColor(img_median, cv2.COLOR_BGR2GRAY)
# Roberts 算子
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)
x = cv2.filter2D(img_gray, cv2.CV_16S, kernelx)
y = cv2.filter2D(img_gray, cv2.CV_16S, kernely)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文標簽
plt.subplot(2,2,1), plt.title("Roberts算子"), plt.axis('off')
plt.imshow(Roberts,cmap='gray')  # matplotlib 顯示彩色圖像(RGB格式)
# Prewitt 算子
kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]],dtype=int)
kernely = np.array([[-1,0,1],[-1,0,1],[-1,0,1]],dtype=int)
x = cv2.filter2D(img_gray, cv2.CV_16S, kernelx)
y = cv2.filter2D(img_gray, cv2.CV_16S, kernely)
# 轉 uint8 ,圖像融合
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
plt.subplot(2,2,2), plt.title("Prewitt算子"), plt.axis('off')
plt.imshow(Prewitt,cmap='gray')  # matplotlib 顯示彩色圖像(RGB格式)
#Sobel算子
# 梯度方向: x
sobelx = cv2.Sobel(img_gray, cv2.CV_8U, 1, 0, ksize=3)
sobely = cv2.Sobel(img_gray, cv2.CV_8U, 0, 1, ksize=3)
sobel = cv2.addWeighted(sobelx,1,sobely,1,0)
plt.subplot(2,2,3), plt.title("sobel算子"), plt.axis('off')
plt.imshow(sobel,cmap='gray')  # matplotlib 顯示彩色圖像(RGB格式)
#canny算子
binary = cv2.Canny(img_gray, 100, 200)
plt.subplot(2,2,4), plt.title("Canny算子"), plt.axis('off')
plt.imshow(binary,cmap='gray')  # matplotlib 顯示彩色圖像(RGB格式)
# matplotlib 顯示彩色圖像(RGB格式)
# img = cv2.imread("D:/test/26.png", 0)
# Laplacian算子
# gray_lap = cv2.Laplacian(img, cv2.CV_16S, ksize=3)
# dst = cv2.convertScaleAbs(gray_lap) # 轉回uint8
plt.show()

17、圖像輪廓標注

gray_img = cv2.cvtColor(img_1,cv2.COLOR_BGR2GRAY) #灰度圖轉化
dep,img_bin = cv2.threshold(gray_img,128,255,cv2.THRESH_BINARY) #二值圖轉化
image_contours,hierarchy = cv2.findContours(img_bin,mode=cv2.RETR_TREE,method = cv2.CHAIN_APPROX_SIMPLE) #獲得圖像輪廓
to_write = img_1.copy() #原始圖像copy,否則會在原圖上繪制
ret = cv2.drawContours(to_write,image_contours,-1,(0,0,255),2) #紅筆繪制圖像輪廓
plt.subplot(2,1,1),plt.imshow(ret,'gray')
plt.show()

18、讀取視頻文件

# 數(shù)據(jù)讀取-視頻
# cv2.VideoCapture #可以捕獲攝像頭,用數(shù)字來控制不同的設備,例如0,1。
# 如果是視頻文件,直接指定好路徑即可
vc = cv2.VideoCapture("test. mp4")
# 檢查是否打開正確
if vc.isOpened():
	oepn, frame = vc.reado()
else: 
    open = False
while open:
	ret, frame = vc.read ()
	if frame is None:
		break
	if ret == True:
		gray = cv2. cvtColor(frame, cv2.COLOR_BGR2GRAY)
		cv2.imshow("result", gray)
		if cv2.waitKey(10) & OxFF == 27:
			break
vc.release()
cv2.destroyAllWindows()

到此這篇關于Python-OpenCV的基本使用的文章就介紹到這了,更多相關Python OpenCV使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • minconda安裝pytorch的詳細方法

    minconda安裝pytorch的詳細方法

    這篇文章主要介紹了minconda安裝pytorch的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • PyQt5使用QTimer實現(xiàn)電子時鐘

    PyQt5使用QTimer實現(xiàn)電子時鐘

    這篇文章主要為大家詳細介紹了PyQt5使用QTimer實現(xiàn)電子時鐘,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python機器學習之神經(jīng)網(wǎng)絡(二)

    python機器學習之神經(jīng)網(wǎng)絡(二)

    這篇文章主要為大家詳細介紹了python機器學習之神經(jīng)網(wǎng)絡第二篇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • python的簡單四則運算語法樹可視化

    python的簡單四則運算語法樹可視化

    這篇文章主要介紹了python的簡單四則運算語法樹可視化,這篇文章的內(nèi)容也很簡單,就是給定一個四則運算的表達式,畫出它的語法樹,需要的朋友可以參考下
    2023-04-04
  • 用Python制作在地圖上模擬瘟疫擴散的Gif圖

    用Python制作在地圖上模擬瘟疫擴散的Gif圖

    這篇文章主要介紹了如何用Python制作在地圖上模擬瘟疫擴散的Gif圖,其中用到了歐拉公式等數(shù)學知識、需要一定的算法基礎,需要的朋友可以參考下
    2015-03-03
  • python中如何寫類

    python中如何寫類

    在本篇文章里小編給大家分享的是一篇關于python中寫類的方法和技巧,需要的朋友們可以學習下。
    2020-06-06
  • 詳解Appium+Python之生成html測試報告

    詳解Appium+Python之生成html測試報告

    這篇文章主要介紹了詳解Appium+Python之生成html測試報告,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • python公司內(nèi)項目對接釘釘審批流程的實現(xiàn)

    python公司內(nèi)項目對接釘釘審批流程的實現(xiàn)

    最近把組內(nèi)的一個項目對接釘釘審批接口,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python編程之屬性和方法實例詳解

    Python編程之屬性和方法實例詳解

    這篇文章主要介紹了Python編程之屬性和方法,以實例形式較為詳細的分析了Python中屬性與方法的功能、特點與使用技巧,需要的朋友可以參考下
    2015-05-05
  • python實現(xiàn)word文檔批量轉成自定義格式的excel文檔的思路及實例代碼

    python實現(xiàn)word文檔批量轉成自定義格式的excel文檔的思路及實例代碼

    這篇文章主要介紹了python實現(xiàn)word文檔批量轉成自定義格式的excel文檔的解決思路及實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02

最新評論