计算机视觉知识点-opencv介绍

 

介绍

opencv是图像处理的一个最常用的库,09年的时候1.0发布,这个库比其它库的优点是运行速度快,初始团队是Intel的专门的优化团队做的。现在由一个开源组织。官网地址是官网, github地址是opencv_git_hub。 我是在10年开始用opencv的,当时感觉这就是cv行业的基础工具啊,特别方便。这里介绍一个opencv的快速上手例子。

导入库

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

读一张图片

img_path = "/Users/..../opencv/road.jpeg" 
img = cv2.imread(img_path) 
print(img.shape)>>>(960, 1280, 3)

灰度化

gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
plt.imshow(gray_image) plt.show()
print(gray_image.shape)>>>(960, 1280)

二值化

(thresh, blackAndWhiteImage) = cv2.threshold(gray_image, 20, 255, cv2.THRESH_BINARY) 
(thresh, blackAndWhiteImage) = cv2.threshold(gray_image, 80, 255, cv2.THRESH_BINARY) 
(thresh, blackAndWhiteImage) = cv2.threshold(gray_image, 160, 255, cv2.THRESH_BINARY) 
(thresh, blackAndWhiteImage) = cv2.threshold(gray_image, 200, 255, cv2.THRESH_BINARY) 
plt.imshow(blackAndWhiteImage) 
plt.show()

模糊

output2 = cv2.blur(gray_image, (10, 10)) 
plt.imshow(output2) 
plt.show()

高斯模糊

output2 = cv2.GaussianBlur(gray_image, (9, 9), 5) 
plt.imshow(output2) 
plt.show()

 

旋转

(h, w) = img.shape[:2] center = (w / 2, h / 2) 
M = cv2.getRotationMatrix2D(center, 13, scale  =1.1) 
rotated = cv2.warpAffine(gray_image, M, (w, h)) 
plt.imshow(rotated) plt.show()

 

边缘

img = cv2.imread(img_path) 
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
(thresh, output2) = cv2.threshold(gray_image, 200, 255, cv2.THRESH_BINARY) 
output2 = cv2.GaussianBlur(output2, (5, 5), 3) 
output2 = cv2.Canny(output2, 180, 255) 
plt.imshow(output2) 
plt.show()

 

 

线条检测

lines = cv2.HoughLinesP(output2, 1, np.pi/180,30) 
for line in lines:     
    x1,y1,x2,y2 = line[0]     
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),4) 
plt.imshow(img)

 

mask

def mask_of_image(image):     
    height = image.shape[0]     
    polygons = np.array([[(0,height),(2200,height),(250,100)]])     
    mask = np.zeros_like(image)     
    cv2.fillPoly(mask,polygons,255)     
    masked_image = cv2.bitwise_and(image,mask)     
    return masked_image

 

形状检测

img = cv2.imread("/Users/.../coin.png") 
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
(thresh, output2) = cv2.threshold(gray_image, 120, 255, cv2.THRESH_BINARY) 
output2 = cv2.GaussianBlur(output2, (5, 5), 1) 
output2 = cv2.Canny(output2, 180, 255) 
plt.imshow(output2, cmap = plt.get_cmap("gray"))
circles = cv2.HoughCircles(output2,cv2.HOUGH_GRADIENT,1,10,param1=180,param2=27,minRadius=20,maxRadius=60) 
circles = np.uint16(np.around(circles)) 
for i in circles[0,:]:     # draw the outer circle     
    cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),2)     # draw the center of the circle                         
    cv2.circle(img,(i[0],i[1]),2,(0,0,255),3)     
plt.imshow(img)

 

文本检测

data = pytesseract.image_to_data(img, output_type=Output.DICT, config = "--psm 6") 
n_boxes = len(data['text']) 
for i in range(n_boxes):     
    (x, y, w, h) = (data['left'][i], data['top'][i], data['width'][i], data['height'][i])     
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
plt.imshow(img) 
plt.show()

 

 

中值滤波

img = cv2.imread(img_path) 
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
output2 = cv2.medianBlur(gray_image, ksize=5) 
plt.imshow(output2) 
plt.show()

 

腐蚀

kernel = np.ones((3,3),np.uint8) 
output2 = cv2.erode(gray_image,kernel,iterations = 3) 
plt.imshow(output2) 
plt.show()

 

膨胀

kernel = np.ones((3,3),np.uint8) 
output2 = cv2.dilate(gray_image,kernel,iterations = 3) 
plt.imshow(output2) 
plt.show()

 

直方图均衡

equ = cv2.equalizeHist(gray_image) 
plt.imshow(equ)

 

 

 注意直方图均衡和直方图拉伸的区别,直方图拉伸只是简单的对直方图进行线性拉伸,直方图均衡对直方图进行拉伸时不是线性的,它把密的地方拉松一些,把松的地方拉紧一些。

 

最后的话:

我是一个工作10年的程序员,工作中经常会遇到需要查一些关键技术,但是很多技术名词的介绍都写的很繁琐,为什么没有一个简单的/5分钟能说清楚的博客呢. 我打算有空就写写这种风格的指南文档.CSDN上搜蓝色的杯子, 没事多留言,指出我写的不对的地方,写的排版风格之类的问题,让我们一起爱智求真吧.wisdomfriend@126.com是我的邮箱,也可以给我邮箱留言.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值