import cv2 #导入OpenCV工具包
print(cv2.getVersionString()) #打印出OpenCV版本号
image =cv2.imread("opencv_logo.jpg") #读取图片文件
print(image.shape) #打印出图片的维度,如打印出的(250,250,3)为(像素横行,像素纵列,三原色)
cv2.imshow("image",image) #将图片显示到一个窗口,并一闪而过
cv2.waitKey() #按任意键关闭窗口
#OpenCV存储图像三原色的顺序为BGR,与我们常说的RGB刚好相反
cv2.imshow("blue",image[:,:,0]) #将图片的BGR灰度图分别显示在名为blue,green,red的三个窗口
cv2.imshow("green",image[:,:,1])
cv2.imshow("red",image[:,:,2])
gray =cv2.cvtColor(image,cv2.C0L0R_BGR2GRAY) #彩色图像灰度算法,将图片BGR通道做平方和加权平均
crop = image[10:170,40:200] #显示图片的一部分先行后列,从第10行到第170行,从第40列到200列
import numpy cv2 #导入numpy数据结构用来创建画布
image =np.zeros([300,300,3],dtype=np.uint8) #numpy创建画布,[300,300,3]是维度,灰度数值类型为无符号8位整数
cv2.line(image,(100,200),(250,250),(255,0,0),2) #画线段,起点为(100,200),终点为(250,250),颜色为(255,0,0)即蓝色,线段粗细为2
cv2.rectangle(image,(30,100),(60,150),(0,255,0),2) #画矩形,第一个顶点为(30,100),对角顶点为(60,150),颜色为(0,255,0)即绿色,矩形框粗细为2
cv2.circle(image,(150,100),20,(0,0,255),3) #画圆环,圆心为(150,100),半径为20,颜色为(0,0,255)即红色,圆环粗细为3
cv2.putText(image,"hello",(100,50),0,1,(255,255,255),2,1) #画字符串,字符串为hello,坐标为(100,50),字体序号为0即默认字体,字体缩放系数为1,颜色为(255,255,255)即白色,线条粗细为2,线条类型为1即实线
gauss =cv2.GaussianBlur(image,(5,5),0)#使用高斯滤波器去除噪点,高斯内核为(5,5)即5个像素,sigmaX为0即sigmaX由内核大小决定
median =cv2.medianBlur(image,5) #用中值滤波器去除噪点,内核为5
corners =cv2.goodFeaturesToTrack(gray,580,0.1,10) #获取特征点,点的个数为500,点的个数优于0.1,特征点的间距大于10个像素
template = gray[75:105,235:265] #使用索引,横行75到105,纵列235到265,正好包含了一个菱形,并赋值给template作为样本
match =cv2.matchTemplate(gray,template,cv2.TM_CCOEFF_NORMED)# 标准相关匹配算法,把待检测图像和模板都各自标准化,避免光照强度影响。gray为待检测图像,template为模板,最后赋值给match
Locations =np.where(match >= 0.9) #找出匹配系数大于0.9的匹配点并赋值给Locations
w,h = template.shape[0:2] #将模板图案的长和宽赋值给w,h
for p in zip(*locations[::-1]): #循环遍列每一个匹配点
x1,y1 = p[0], p[1]
X2,y2 =x1 + W,y1 + h
cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2) #在原始图像上画出每个匹配点对应的矩形框
gray = cv2.imread("opencv_logo.jpg", CV2.IMREAD_GRAYSCALE)#读取图像的灰度图
Laplacian =cv2.Laplacian(gray,cv2.CV_64F) #使用拉普拉斯算子将名为gray的图像的明暗变化梯度转为梯度图,并赋值给Laplacian
canny =cv2.Canny(gray,100,280) #canny算法边缘检测,梯度区间为100到200,梯度大于200的像素就被认定为边缘,梯度小于100的像素不会被认定为边缘,梯度在100到200之间的像素如果与边缘像素相连则也会被判定为边缘,否则不会判断为边缘
ret, binary =cv2.threshold(gray,10,255,CV2.THRESH_BINARY) #阈值算法(即二值化,二值就是黑与白,阈值算法认为图像非黑即白),10为阈值,255为最大灰度,最后把算出的值赋给binary