OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1]
它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
1、要尝试opencv,先要搭建开发环境。这里选用python3.7开发环境。
下载安装 python-3.7.9-amd64.exe
下载安装 pycharm-community-2020.3.3.exe
下载安装 opencv_python-4.4.0-cp37-cp37m-win_amd64.whl (https://www.lfd.uci.edu/~gohlke/pythonlibs/)
pip install D:\Programs\Python\Python37\libs\opencv_python-4.4.0-cp37-cp37m-win_amd64.whl
pycharm很强大,如图左下角可以直接添加第三方包的。不过opencv_python安装不了,所以只能用手工下载安装包的方式安装。
2、读取图片,并显示
import cv2
img = cv2.imread("resource/20190310205715.jpg") #也可以用绝对路径
cv2.imshow("gaofeng",img) #窗口标题为gaofeng
cv2.waitKey(0) #等待键盘输入,否则窗口立即关闭,程序结束。
3、其它图片处理函数
def img():
img = cv2.imread("resource/20190310205715.jpg") #也可以用绝对路径
cv2.imshow("gaofeng", img) # 窗口标题为gaofeng
imggray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转化为灰度图像
cv2.imshow("gray", imggray)
imgBlur = cv2.GaussianBlur(imggray,(11,11),0) #高斯滤波(模糊处理)
cv2.imshow("imgBlur", imgBlur)
imgCanny = cv2.Canny(img,100,100)
cv2.imshow("imgCanny",imgCanny)
kernel = np.ones((5,5),np.uint8)
imgdilate = cv2.dilate(imgCanny,kernel,iterations=2) #膨胀,把线条变粗
imgerode = cv2.erode(imgdilate,kernel,iterations=2) #腐蚀,把线条变细
cv2.imshow("imgdilate", imgdilate)
cv2.imshow("imgerode", imgerode)
cv2.waitKey(0) #等待键盘输入,否则窗口立即关闭,程序结束。
4、图片缩放和剪切
def resize():
img = cv2.imread("resource/20190310205715.jpg")
imgresize = cv2.resize(img,(540,720))#缩放
imgcut = img[0:200,200:500] #剪切一个区域
print(img.shape,imgresize)
cv2.imshow("img", img)
cv2.imshow("imgresize", imgresize)
cv2.imshow("imgcut", imgcut)
cv2.waitKey(0)
5、视频和摄像头
def video():
cap = cv2.VideoCapture("F:\\草莓红\\06 魔术六:心灵卡片.mp4")
#cap = cv2.VideoCapture(0) #从笔记本摄像头读取
cap.set(3,480) #宽
cap.set(4,320) #高
cap.set(10,100) #cv2.CAP_PROP_BRIGHTNESS 亮度
while True:
success,img = cap.read() #读一张图片
cv2.imshow("gaofeng", img) #显示一个图片
if (cv2.waitKey(40) & 0xff) == ord('q'): #40毫秒播放一张图片;按下q则退出
break
6、画图形
import numpy as np
def shape():
img = np.zeros((512,512,3),np.uint8)#512*512的图片
print(img)
img[:]=0,255,0 #颜色
# img[128:300] = 255, 0, 0 # 颜色
img[128:300,20:100] = 255, 0, 0 # 颜色
cv2.line(img,(0,0),(int(img.shape[1]/2),300),(0,0,255),3)#画一条线
cv2.rectangle(img,(30,10),(50,50),(0,0,255))
cv2.circle(img,(70,80),40,(0,0,255),2)
cv2.putText(img,"gaofeng",(70,80),cv2.FONT_HERSHEY_SCRIPT_COMPLEX,1,(0,0,90))
cv2.imshow("img", img)
cv2.waitKey(0)
7、打印图片的每个像素
读取到的图片是 class 'numpy.ndarray'
打印红色通道 print(img[0]) 打印结果是第一行的n个点,每个点是 [r g b]
参考
8、图像匹配
【 OpenCV 】MatchTemplate函数参数详解及原理分析_Nick大帅仔 的博客-CSDN博客
all = cv.imread('all.png', cv.IMREAD_COLOR)
key = cv.imread('key.png', cv.IMREAD_COLOR)
h, w = key.shape[:2]
result = cv.matchTemplate(all, key, cv.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result) #对比结果最大值最小值以及位置
br = (max_loc[0] + w, max_loc[1] + h)
cv.rectangle(all, max_loc, br, [0, 255, 0], 2)
cv.imshow("pipei", all)
cv.waitKey(0)