OpenCV 初體驗

我的博客原文連接python

本文簡單地介紹計算機圖形處理的一些基本概念,以及一些有趣的例子和對應的Open CV的代碼操做。git

順便說一句,恭喜IG奪冠!github

1、圖片存儲原理

一、顏色空間RGB

(1)RGB三通道彩色圖spa

圖片由三維矩陣疊加而成([0,255]),通俗講就是將三個分別只有R(red),G(green),B(blue)的矩陣疊加。3d

三維矩陣

二、圖像處理

(1)卷積/濾波code

2、OpenCV基礎

Open CV是一個開源的計算機視覺庫,採用C/C++編寫,提供Python、MATLAB以及其餘語言的接口。cdn

一、基本I/O操做

#-*- coding: utf-8 -*-
import cv2

# 打開圖片
img = cv2.imread('lion.jpg')

# 顯示圖片
img = cv2.imshow('lion','lion.jpg')

# 保存圖片
cv2.imwrite('lion2.jpg',img)

複製代碼

二、灰度、二值化處理

灰度化:在RGB模型中,若是R=G=B時,則彩色表示一種灰度顏色。xml

二值化:圖像的二值化,就是將圖像上的像素點的灰度值設置爲0或255,整個圖像呈現出明顯的只有黑和白的視覺效果blog

#-*- coding: utf-8 -*-
import cv2  

# 讀取圖片
img = cv2.imread('wsc.jpeg')

# 灰度化處理、保存處理後文件
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('wsc-gray.jpg',img)

# 二值化處理、保存處理後文件
cv2.threshold(image, 550, 550, 0, image) 
cv2.imwrite('wsc-two-value.jpg',img)

複製代碼
圖片處理前 灰度處理
wsc圖片處理前 wsc圖片處理前
圖片處理前 二值處理
wsc圖片處理前 wsc圖片處理後

三、圖片匹配

matchTemplate用於在圖像中與模板圖片比對,查找目標接口

cv2.matchTemplate(img,template,eval('cv2.TM_CCOEFF'))

複製代碼

關鍵參數

  • TM_SQDIFF 平方差匹配法:該方法採用平方差來進行匹配;最好的匹配值爲0;匹配越差,匹配值越大。

  • TM_CCORR 相關匹配法:該方法採用乘法操做;數值越大代表匹配程度越好。

  • TM_CCOEFF 相關係數匹配法:1表示完美的匹配;-1表示最差的匹配。

  • TM_SQDIFF_NORMED 歸一化平方差匹配法      

  • TM_CCORR_NORMED 歸一化相關匹配法      

  • TM_CCOEFF_NORMED 歸一化相關係數匹配法

3、有趣的例子

一、邊緣檢測

Canny邊緣檢測

代碼

#-*- coding: utf-8 -*-
import cv2

# 讀取圖片
img = cv2.imread('wsc.jpeg')

# Canny邊緣檢測處理,並寫入圖片
cv2.imwrite('wsc1.jpeg',cv2.Canny(img,200,300))


複製代碼
圖片處理前 圖片處理後
wsc圖片處理前 wsc圖片處理後

二、人臉檢測

haarcascade_frontalface_default.xml,該文件爲人臉檢測器(默認)文件,文件可在OpenCV的Github上下載。

#-*- coding: utf-8 -*-
import cv2

def detect(filename):

    face_cascade = cv2.CascadeClassifier('./data/haarcascades/haarcascade_frontalface_default.xml')

    # 讀取圖片
    img = cv2.imread(filename)

    # 圖片灰度處理
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    # 人臉檢測,每次迭代圖像壓縮率、人臉矩形保留近鄰數目最小值
    faces = face_cascade.detectMultiScale(gray,1.3,6)

    # x,y爲左上角座標,w,h表示人臉寬度和高度
    for(x,y,w,h) in faces:
        # 檢測到人臉繪製成藍色矩形
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

    # 寫入文件
    cv2.imwrite('/Users/fangzhijie/Pictures/ig1.jpeg',img)

filename = 'ig.jpeg'
detect(filename)

複製代碼
圖片處理前
wsc圖片處理前
圖片處理後
wsc圖片處理前

剩下的三位沒有識別出來,待定位緣由。

三、圖像匹配

搜索模板圖片

模板圖片

原圖

IG原圖

代碼

# -*- coding: utf-8 -*-

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 讀取圖片
img = cv2.imread('ig.jpeg')
template = cv2.imread('wsc123.png')
# 對圖片進行縮放,縮放到合適大小90*90
template = cv2.resize(template, (90, 90),interpolation=cv2.INTER_CUBIC)

# 進行圖像匹配
res = cv2.matchTemplate(img,template,eval('cv2.TM_CCOEFF'))

# 記錄模板的寬度和高度
w, h = template[:,:,0].shape[::-1]

# 王思聰邊框的具體位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

# 畫出紅框
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
imgplt = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.rectangle(imgplt,top_left, bottom_right, 255, 2)

# 顯示圖片
plt.imshow(imgplt)
plt.title('Detected results'), plt.xticks([]), plt.yticks([])
plt.show()

複製代碼

結果

處理結果
相關文章
相關標籤/搜索