身为大学生党的我,目前正在努力学习图像处理的相关知识,这篇文章是我的一点心得——目标识别。图像处理(image processing),用计算机对图像进行分析,以达到所需结果的技术,又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值(0-255)。
图像处理技术的一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。 常见的系统有康耐视系统、图智能系统等,目前是正在逐渐兴起的技术。
数据库的引用(这里引用了opencv{cv2},numpy)
import cv2 as cv
import numpy as np
获取摄像头
cap=cv.VideoCapture(0)
指定追踪目标
ret,frame=cap.read() #读取第一帧
r,h,c,w=200,141,70,208
win=(c,r,w,h) #追踪窗口
这里的r,h,c,w根据实际情况确定。r即行,h即高,c即列,w即宽。
获取ROI直方图
roi=frame[r:r+h,c:c+w]
计算直方图
hsv_roi=cv.cvtColor(roi,cv.COLOR_BGR2HSV)
roi_hist=cv.calcHist([hsv_roi],[2],None,[180],[0,180])
归一化,像素值0-255
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
目标追踪
term=(cv.TERM_CRITERIA_EPS|cv.TERM_CRITERIA_COUNT,10,1)
设置迭代的终止标准,最多十次迭代
while(1):
ret,frame=cap.read()
if ret==True:
hst=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
dst=cv.calcBackProject([hst],[0],roi_hist,[0,180],1) #直方图反向投影
ret,win=cv.meanShift(dst,win,term)
x,y,w,h=win
img2=cv.rectangle(frame,(x,y),(x+w,y+h),255,3)
cv.rectangle()函数:绘制矩形
扩展:cv.line()函数:绘制直线
cv.circle()函数:绘制圆形,存在-1实心圆
cv.putText()函数:添加文字,这里只能是英文,中文的话只会显示?,但可def引用库来解决,目前我还是对解决过程存疑,但解决方法一定木有问题,就是def引用库来解决
? ? ? ? ? ? ? ? ? ? ? ?-----------------------------------------------------------------------绘制几何图形
显示图像
cv.imshow('frame',img2)
if cv.waitKey(60) & 0xFF == ord('q'):
break
60指60ms(毫秒)
?释放对象和销毁窗口
cap.release()
cv.destroyAllWindows()
最后,注意:如果在开始的数据库引用前未指明import cv2 as cv而只引用了import cv2则后面的所有cv2改成cv。
由于本人刚刚接触图像处理,不是十分精通,希望广大人士支持并及时改正,让我们彼此成长,感激不尽哇。??
|