tft每日頭條

 > 生活

 > 圖像識别除了opencv還有哪些

圖像識别除了opencv還有哪些

生活 更新时间:2024-06-29 21:24:11
一、OpenCV簡介

圖像識别除了opencv還有哪些(有哪些基礎圖像處理操作)1

OpenCV是一款由Intel公司俄羅斯團隊發起并參與和維護的一個計算機視覺處理開源軟件庫,支持與計算機視覺和機器學習相關的衆多算法,并且正在日益擴展。

1.1 OpenCV的優勢:
  1. 編程語言OpenCV基于C 實現,同時提供python, Ruby, Matlab等語言的接口。OpenCV-Python是OpenCV的Python API,結合了OpenCV C API和Python語言的最佳特性。
  2. 跨平台可以在不同的系統平台上使用,包括Windows,Linux,OS X,Android和iOS。基于CUDA和OpenCL的高速GPU操作接口也在積極開發中
  3. 活躍的開發團隊
  4. 豐富的API完善的傳統計算機視覺算法,涵蓋主流的機器學習算法,同時添加了對深度學習的支持。
1.2 OpenCV-Python

OpenCV-Python是一個Python綁定庫,旨在解決計算機視覺問題。

Python是一種由Guido van Rossum開發的通用編程語言,它很快就變得非常流行,主要是因為它的簡單性和代碼可讀性。它使程序員能夠用更少的代碼行表達思想,而不會降低可讀性。

與C / C 等語言相比,Python速度較慢。也就是說,Python可以使用C / C 輕松擴展,這使我們可以在C / C 中編寫計算密集型代碼,并創建可用作Python模塊的Python包裝器。這給我們帶來了兩個好處:首先,代碼與原始C / C 代碼一樣快(因為它是在後台工作的實際C 代碼),其次,在Python中編寫代碼比使用C / C 更容易。OpenCV-Python是原始OpenCV C 實現的Python包裝器。

OpenCV-Python使用Numpy,這是一個高度優化的數據庫操作庫,具有MATLAB風格的語法。所有OpenCV數組結構都轉換為Numpy數組。這也使得與使用Numpy的其他庫(如SciPy和matplotlib)集成更容易。

1.3 OpenCV部署方法

安裝OpenCV之前需要先安裝numpy, matplotlib。

創建Python虛拟環境cv, 在cv中安裝即可。

先安裝OpenCV-Python, 由于一些經典的算法被申請了版權,新版本有很大的限制,所以選用3.4.3以下的版本

pip install opencv-python==3.4.2.17

現在可以測試下是否安裝成功,運行以下代碼無報錯則說明安裝成功。

import cv2 # 讀一個圖片并進行顯示(圖片路徑需自己指定) lena=cv2.imread("1.jpg") cv2.imshow("image",lena) cv2.waitKey(0)

如果我們要利用SIFT和SURF等進行特征提取時,還需要安裝:

pip install opencv-contrib-python==3.4.2.17

1.4 OpenCV的模塊

下圖列出了OpenCV中包含的各個模塊:

圖像識别除了opencv還有哪些(有哪些基礎圖像處理操作)2

其中core、highgui、imgproc是最基礎的模塊,該課程主要是圍繞這幾個模塊展開的,分别介紹如下:

  • core模塊實現了最核心的數據結構及其基本運算,如繪圖函數、數組操作相關函數等。
  • highgui模塊實現了視頻與圖像的讀取、顯示、存儲等接口。
  • imgproc模塊實現了圖像處理的基礎方法,包括圖像濾波、圖像的幾何變換、平滑、阈值分割、形态學處理、邊緣檢測、目标檢測、運動分析和對象跟蹤等。

對于圖像處理其他更高層次的方向及應用,OpenCV也有相關的模塊實現

  • features2d模塊用于提取圖像特征以及特征匹配,nonfree模塊實現了一些專利算法,如sift特征。
  • objdetect模塊實現了一些目标檢測的功能,經典的基于Haar、LBP特征的人臉檢測,基于HOG的行人、汽車等目标檢測,分類器使用Cascade Classification(級聯分類)和Latent SVM等。
  • stitching模塊實現了圖像拼接功能。
  • FLANN模塊(Fast Library for Approximate Nearest Neighbors),包含快速近似最近鄰搜索FLANN 和聚類Clustering算法。
  • ml模塊機器學習模塊(SVM,決策樹,Boosting等等)。
  • photo模塊包含圖像修複和圖像去噪兩部分。
  • video模塊針對視頻處理,如背景分離,前景檢測、對象跟蹤等。
  • calib3d模塊即Calibration(校準)3D,這個模塊主要是相機校準和三維重建相關的内容。包含了基本的多視角幾何算法,單個立體攝像頭标定,物體姿态估計,立體相似性算法,3D信息的重建等等。
  • G-API模塊包含超高效的圖像處理pipeline引擎
二、圖像的基礎操作2.1 圖像的IO操作

這裡我們會給大家介紹如何讀取圖像,如何顯示圖像和如何保存圖像。

(1)讀取圖像

  1. API

cv.imread()

參數:

  • 要讀取的圖像
  • 讀取方式的标志
    • cv.IMREAD*COLOR:以彩色模式加載圖像,任何圖像的透明度都将被忽略。這是默認參數。
    • cv.IMREAD*GRAYSCALE:以灰度模式加載圖像
    • cv.IMREAD_UNCHANGED:包括alpha通道的加載圖像模式。可以使用1、0或者-1來替代上面三個标志
  • 參考代碼

import numpy as np import cv2 as cv # 以灰度圖的形式讀取圖像 img = cv.imread('messi5.jpg',0)

注意:如果加載的路徑有錯誤,不會報錯,會返回一個None值

(2)顯示圖像

1 . API

cv.imshow()

參數:

  • 顯示圖像的窗口名稱,以字符串類型表示
  • 要加載的圖像

注意:在調用顯示圖像的API後,要調用cv.waitKey()給圖像繪制留下時間,否則窗口會出現無響應情況,并且圖像無法顯示出來

另外我們也可使用matplotlib對圖像進行展示。

  1. 參考代碼

# opencv中顯示 cv.imshow('image',img) cv.waitKey(0) # matplotlib中展示 plt.imshow(img[:,:,::-1])

(3)保存

  1. API

cv.imwrite()

參數:

    • 文件名,要保存在哪裡
    • 要保存的圖像
  1. 參考代碼

cv.imwrite('messigray.png',img)

2.2 繪制幾何圖形

繪制直線

cv.line(img,start,end,color,thickness)

參數:

  • img:要繪制直線的圖像
  • Start,end: 直線的起點和終點
  • color: 線條的顔色
  • Thickness: 線條寬度

繪制圓形

cv.circle(img,centerpoint, r, color, thickness)

參數:

  • img:要繪制圓形的圖像
  • Centerpoint, r: 圓心和半徑
  • color: 線條的顔色
  • Thickness: 線條寬度,為-1時生成閉合圖案并填充顔色

繪制矩形

cv.rectangle(img,leftupper,rightdown,color,thickness)

參數:

  • img:要繪制矩形的圖像
  • Leftupper, rightdown: 矩形的左上角和右下角坐标
  • color: 線條的顔色
  • Thickness: 線條寬度

向圖像中添加文字

cv.putText(img,text,station, font, fontsize,color,thickness,cv.LINE_AA)

參數:

  • img: 圖像
  • text:要寫入的文本數據
  • station:文本的放置位置
  • font:字體
  • Fontsize :字體大小

效果展示

我們生成一個全黑的圖像,然後在裡面繪制圖像并添加文字

import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 1 創建一個空白的圖像 img = np.zeros((512,512,3), np.uint8) # 2 繪制圖形 cv.line(img,(0,0),(511,511),(255,0,0),5) cv.rectangle(img,(384,0),(510,128),(0,255,0),3) cv.circle(img,(447,63), 63, (0,0,255), -1) font = cv.FONT_HERSHEY_SIMPLEX cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA) # 3 圖像展示 plt.imshow(img[:,:,::-1]) plt.title('匹配結果'), plt.xticks([]), plt.yticks([]) plt.show()

結果:

圖像識别除了opencv還有哪些(有哪些基礎圖像處理操作)3

2.3 獲取并修改圖像中的像素點

我們可以通過行和列的坐标值獲取該像素點的像素值。對于BGR圖像,它返回一個藍,綠,紅值的數組。對于灰度圖像,僅返回相應的強度值。使用相同的方法對像素值進行修改。

import numpy as np import cv2 as cv img = cv.imread('messi5.jpg') # 獲取某個像素點的值 px = img[100,100] # 僅獲取藍色通道的強度值 blue = img[100,100,0] # 修改某個位置的像素值 img[100,100] = [255,255,255]

2.4 獲取圖像的屬性

圖像屬性包括行數,列數和通道數,圖像數據類型,像素數等。

圖像識别除了opencv還有哪些(有哪些基礎圖像處理操作)4

2.5 圖像通道的拆分與合并

有時需要在B,G,R通道圖像上單獨工作。在這種情況下,需要将BGR圖像分割為單個通道。或者在其他情況下,可能需要将這些單獨的通道合并到BGR圖像。你可以通過以下方式完成。

# 通道拆分 b,g,r = cv.split(img) # 通道合并 img = cv.merge((b,g,r))

2.6 色彩空間的改變

OpenCV中有150多種顔色空間轉換方法。最廣泛使用的轉換方法有兩種,BGR↔Gray和BGR↔HSV。

API:

cv.cvtColor(input_image,flag)

參數:

  • input_image: 進行顔色空間轉換的圖像
  • flag: 轉換類型
    • cv.COLOR_BGR2GRAY : BGR↔Gray
    • cv.COLOR_BGR2HSV: BGR→HSV
,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved