⽺⼩咩@iPlayground 2020
使用openCV做影像辨識
Blog : lamb-mei.com
	羊小咩
E-mail : lamb@lamb-mei.com
FB : https://www.facebook.com/lamb.mei
twitter:https://twitter.com/lamb_mei
Lamb Mei
Agenda
• OpenCV 簡介
• OpenCV on Xcode
• 辨識處理流程
• 影像處理
• 顏⾊處理
• ⼆值化
• 形態學
• 輪廓
• 幾何變換
• 邊緣偵測
• 霍夫變換
OpenCV
OpenCV的全稱是Open Source Computer Vision
Library,是⼀個跨平台的電腦視覺庫。OpenCV是由英特
爾公司發起並參與開發,以BSD授權條款授權發⾏,可以
在商業和研究領域中免費使⽤。OpenCV可⽤於開發即時
的圖像處理、電腦視覺以及圖型識別程式。該程式庫也可
以使⽤英特爾公司的IPP進⾏加速處理。
OpenCV
•擴增實境
•臉部辨識
•⼿勢辨識
•⼈機互動
•動作辨識
•運動跟蹤
•物體辨識
•圖像分割
•機器⼈
OpenCV可⽤於解決如下領域的問題
OpenCV 應⽤ : ⾃動駕駛
OpenCV 應⽤ : AR
來源 https://www.youtube.com/watch?v=B4pc_e8mdcs
OpenCV 應⽤ : AR
來源 https://www.youtube.com/watch?v=-mhdMoPInf8
OpenCV on Xcode
x
cocoaPods 安裝(⽅法⼀)
⽅便但無法安裝到最新版本
難度:★☆☆☆☆
⼿動設定 OpenCV(⽅法⼆) 1/2
https://opencv.org/releases/
Download OpenCV Framework
⼿動設定 OpenCV(⽅法⼆) 1/2
https://opencv.org/releases/
P.S 新版不⼀定最好
演算法可能被賣掉 (゚⊿゚)
SURF / SIFT 特徵檢測在4.x+版本都無法使⽤
Download OpenCV Framework
難度:★★★☆☆
⼿動設定 OpenCV(⽅法⼆) 2/2
將framework 拖曳⾄專案
⾃⾏編譯 (⽅法三)
優點可以控制需要的功能,節省size
難度:★★★★★
難度超過範疇

請付費解鎖
OpenCV on Xcode
x
How to use
1. 新增語⾔Obj-C檔案
How To Use
2. 將.m檔更名為.mm

告知編譯器採⽤Objective C++
How To Use
3. 加入C++ 測試⽅法 & 取得OpenCV版本號
How To Use
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface OpenCVWrapper : NSObject
+ (NSString *) test_c;
+ (NSString *) cv_version;
@end
NS_ASSUME_NONNULL_END
#include "OpenCVHeader.h"
#import "OpenCVWrapper.h"
//啟⽤命名空間
using namespace cv;
using namespace std;
@implementation OpenCVWrapper
+ (NSString *) test_c{
char str[]="Hello C++";
std::cout << str << std::endl;
return [NSString stringWithUTF8String:str];
}
+ (NSString *) cv_version{
cout << "OpenCV version : " << CV_VERSION << endl;
char str[]= CV_VERSION;
return [NSString stringWithUTF8String:str];
}
.h
.mm
4. import OpenCV
How To Use
#ifndef OpenCVHeader_h
#define OpenCVHeader_h
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#import <opencv2/opencv.hpp>
#import <opencv2/imgproc/types_c.h>
#import <opencv2/imgcodecs/ios.h>
#pragma clang pop
#endif /* OpenCVHeader_h */
OpenCVHeader.h
5. Header import <swift / obj-c混合專案>
How To Use
#import "OpenCVWrapper.h"
#import <TesseractOCR/TesseractOCR.h>
<Product Name>-Bridging-Header.h
#import <Foundation/Foundation.h>
//! Project version number for RecognitionInvoice.
FOUNDATION_EXPORT double RecognitionInvoiceVersionNumber;
//! Project version string for RecognitionInvoice.
FOUNDATION_EXPORT const unsigned char RecognitionInvoiceVersionString[];
#import "OpenCVWrapper.h"
#import <TesseractOCR/TesseractOCR.h>
<Product Name>.h
framework Umbrella Header
辨識流程
x
辨識流程
影像輸入 前置處理
切割辨識
辨識流程
影像輸入 前置處理
切割辨識
辨識流程 影像輸入
觀察影像特性
選擇適合的處理⽅法
有雜訊的 前置處理
固定圖案 樣板比對 / 特徵點
思考發票特徵
辨識流程
影像輸入 前置處理
切割辨識
辨識流程 前置處理
灰階化
去雜訊
移除⼲擾線
⼆值化
只對⽂字感興趣
⾊彩不應影響結果
移除不需雜訊

濾波 / 侵蝕
將最後輪廓標⽰出來
辨識流程
影像輸入 前置處理
切割辨識
辨識流程 切割
垂直投影法 如果黏再⼀起就再均分切割
辨識流程 切割 part II
找輪廓 包裹 擷取 正規化
可以找輪廓時
直接找四點構成的輪廓
傾斜轉正
即找旋轉後
最窄的長⽅形
(最左和最右點
距離最短者)
⼤⼩統⼀ 

辨識時點對點
設立⼤⼩⾨檻值,
以擷取適當長⽅形
辨識流程
影像輸入 前置處理
切割辨識
‘TesseractOCRiOS‘
‘SwiftyTesseract‘
辨識流程 辨識 ⽅法⼀
Tesseract 開源⽂字辨識庫
(推薦)
辨識流程 辨識 ⽅法⼆
K-Nearest Neighbors(KNN)
KNN訓練出來的神經網路可⽤來分類
辨識流程 辨識 ⽅法⼆
K-Nearest Neighbors(KNN)
x
OpenCV
Features
圖片格式
矩陣的型式表現,每個值都代表⼀⼀個 pixel
另外矩陣不⼀⼀定是 2D 的,有可能包含多個 channel。
JPG 250 x 250 px 250 x 250 x 3
影像處理 cv::Mat
• Resize
cv::Mat imageMat_Orig;
UIImageToMat(image, imageMat_Orig);
cv::resize(imageMat_Orig, imageMat_Orig ,
cv::Size(imageMat_Orig.cols * rate ,
imageMat_Orig.rows * rate), 0, 0,
CV_INTER_AREA);
• 曝光 增強... etc
影像處理
• Exif 轉向處理
顏⾊處理 cv::cvtColor
HSL ⾊⾊彩空間⽰⽰意圖HSV ⾊⾊彩空間⽰⽰意圖
有時候需要進⾏⾊彩空間的切換 ,因為RGB選⾊不易
顏⾊處理 inRange
選擇⽪膚顏⾊
範圍 Scalar(0, 10, 60), Scalar(20, 150, 255)
⼆值化 cv::threshold
設定閾值;⼩於閾值將其設置為0(⽩),否則將其設置為最⼤值(⿊)
cv::threshold (InputArray src, OutputArray dst, double thresh, double maxval, int type)
形態學 cv::erode / cv::dilate
原圖
腐蝕
erode
膨脹
dilate
形態學 cv::morphologyEx
原圖 開運算 open
開運算 = 腐蝕 + 膨脹
先腐蝕(瘦)后膨脹(胖) 叫開運算,其作⽤是:分離物體,消除⼩區域
形態學 cv::morphologyEx
原圖 閉運算 close
閉運算 = 膨脹 + 腐蝕
其作⽤是:填充閉合區域
輪廓 cv:: findContours
輪廓可以簡單認為成連續的點(必須封閉)連在⼀起的曲線,具有相同的顏
⾊或者灰度。輪廓在形狀分析和物體的檢測和識別中很有⽤
輪廓
外接矩形
最⼩外接矩形
輪廓特性
輪廓
•輪廓⾯積

•輪廓周長

•矩 (幾何特徵)

質⼼ ⾯積 

•外接矩形

•最⼩外接圓

•擬合橢圓

•形狀匹配
幾何變換 WarpAffine / WarpPerspective
WarpAffine 仿射變換
WarpPerspective 透視變換

(有消失點)
邊緣偵測 cv::Canny
原圖 灰階
⾼斯模糊(去雜訊)Canny尋找邊緣
霍夫變換 cv::HoughLinesP(找線)
Canny 處理
將線段找出來
霍夫變換 cv::HoughCircles(找圓)
OpenCV Features
今天介紹的部分
⼯商時間
https://cutt.ly/IgGKH0K
智能發票
最智能的發票對獎
腐蝕

erode
⼆值化

threshold
原始
智能發票 辨識流程
開運算 open
膨脹dilate
尋找輪廓

findContours ⽂字辨識
仿射變換
智能發票 辨識流程
舉個栗⼦
https://github.com/lamb-mei/RecognitionImage
範例程式碼
舉個栗⼦🌰 - 找圓
https://github.com/lamb-mei/RecognitionImage
範例程式碼
舉個栗⼦🌰 - 找特徵點
想要 🌰 程式碼? 都放在這裡了!
https://github.com/lamb-mei/RecognitionImage
⽺⼩咩@iPlayground
Thank You
Watching!
For
FB:https://www.facebook.com/lamb.mei
twitter:https://twitter.com/lamb_mei

More Related Content

PPTX
Monomi: Practical Analytical Query Processing over Encrypted Data
PPTX
Introduction to Performance Testing & Loadrunner
PPTX
Python Programming Essentials - M6 - Code Blocks and Indentation
PPTX
Test automation proposal
PDF
Overview of JSON Object Signing and Encryption
PDF
Test automation wipro
PDF
MOBILITY X DATA : 모빌리티 산업의 도전 과제
PPTX
Selenium introduction
Monomi: Practical Analytical Query Processing over Encrypted Data
Introduction to Performance Testing & Loadrunner
Python Programming Essentials - M6 - Code Blocks and Indentation
Test automation proposal
Overview of JSON Object Signing and Encryption
Test automation wipro
MOBILITY X DATA : 모빌리티 산업의 도전 과제
Selenium introduction

What's hot (20)

PDF
Time Series Analytics with Spark: Spark Summit East talk by Simon Ouellette
PDF
Angular Material (2) - NgVikingsConf
PDF
i-VOC (Voice of the Customer Big Data Analytics Solution) 고객의소리 분석
PDF
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
PPTX
SOAP To REST API Proxy
PPTX
FMX 2017: Extending Unreal Engine 4 with Plug-ins (Master Class)
PPTX
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
PPTX
모바일 SNG 비동기 네트워크 통신 사례
PPTX
Browser-Based Load Testing with Grafana K6
PDF
Automated Testing for Embedded Software in C or C++
PPTX
Introduction to selenium
PPTX
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
PDF
How To Write A Test Case In Software Testing | Edureka
PPT
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
PPTX
Textual & Sentiment Analysis of Movie Reviews
PPS
Testing techniques
PPTX
Acceptance testing
KEY
High performance network programming on the jvm oscon 2012
PDF
Functional Testing Tutorial | Edureka
PDF
Scaling Uber
Time Series Analytics with Spark: Spark Summit East talk by Simon Ouellette
Angular Material (2) - NgVikingsConf
i-VOC (Voice of the Customer Big Data Analytics Solution) 고객의소리 분석
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
SOAP To REST API Proxy
FMX 2017: Extending Unreal Engine 4 with Plug-ins (Master Class)
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
모바일 SNG 비동기 네트워크 통신 사례
Browser-Based Load Testing with Grafana K6
Automated Testing for Embedded Software in C or C++
Introduction to selenium
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
How To Write A Test Case In Software Testing | Edureka
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
Textual & Sentiment Analysis of Movie Reviews
Testing techniques
Acceptance testing
High performance network programming on the jvm oscon 2012
Functional Testing Tutorial | Edureka
Scaling Uber
Ad

Similar to 使用openCV做影像辨識 @ iplayground (10)

PPTX
Using openCV on Raspberry Pi
PPTX
[4]投影片 futurewad樹莓派研習會 141211
PDF
2017 Week 14 Computer Vision
PDF
2018 Week 16 Computer Vision
PDF
20200905_tcn_python_opencv_part1_omnixri
PDF
Computer vision introduction
 
PPTX
iOS swift & Cloud Vision API 玩圖像辨識
PDF
電腦視覺與Open CV 影像處理簡介
PDF
OpenCV 2.4.2在codeblocks 10.05的環境設定
PDF
Py cv time x pyladies
Using openCV on Raspberry Pi
[4]投影片 futurewad樹莓派研習會 141211
2017 Week 14 Computer Vision
2018 Week 16 Computer Vision
20200905_tcn_python_opencv_part1_omnixri
Computer vision introduction
 
iOS swift & Cloud Vision API 玩圖像辨識
電腦視覺與Open CV 影像處理簡介
OpenCV 2.4.2在codeblocks 10.05的環境設定
Py cv time x pyladies
Ad

More from 羊 小咩 (lamb-mei) (12)

PDF
資訊安全從連線加密開始 workshop 2020/01
PDF
你的APP安全嗎
PDF
非對稱加密-以橢圓曲線密碼學ECC為例
PDF
致,第三者 - 從中間人攻擊看Network Debug
PDF
Git由超淺入超深
PPTX
咩星征服計劃 用 Js 征服地球Part VI
PPTX
咩星征服計劃 用 Js 征服地球 Part III
PPTX
咩星征服計劃 用 Js 征服地球 Part II
PPTX
咩星征服計劃 用 Js 征服地球
PPTX
主管不會教、自己學不會的 Google analytics
PPT
重新認識Facebook
PPTX
那些年,我們一起做的 App
資訊安全從連線加密開始 workshop 2020/01
你的APP安全嗎
非對稱加密-以橢圓曲線密碼學ECC為例
致,第三者 - 從中間人攻擊看Network Debug
Git由超淺入超深
咩星征服計劃 用 Js 征服地球Part VI
咩星征服計劃 用 Js 征服地球 Part III
咩星征服計劃 用 Js 征服地球 Part II
咩星征服計劃 用 Js 征服地球
主管不會教、自己學不會的 Google analytics
重新認識Facebook
那些年,我們一起做的 App

使用openCV做影像辨識 @ iplayground