OpenCV | 练习笔记

一、初始

配置:需要 pip install opencv-contrib-python

                   pip install numpy

 在pycharm中配置好环境

#读入 cv2.inread()

#输出 cv2.imshow() 

#暂停进程 cv2.waitKey()

#计算机视觉库
import cv2
#查看版本号
print(cv2.getVersionString())
#导入图片
image = cv2.imread("opencv_logo.jpg")#numpy数组维度类型
#查看图片参数
print(image.shape)#(像素横行,像素纵列,色彩通道)
#输出图片
cv2.imshow("image",image)#窗口名,变量名
#暂停等待 可以观察图片 在激活的窗口上输入任意键 结束
cv2.waitKey()

二、图像彩色通道color

#   存储一张彩色图片相当于三张灰度图,被存储在三个维度上,灰度范围0-255
#   opencv对颜色的存储顺序是 BGR

#展示不同的色彩通道  cv2.imshow("red",image[:,:,2]) 

#输出灰度图 cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#color
import cv2
image = cv2.imread("opencv_logo.jpg")

cv2.imshow("blue",image[:,:,0])
cv2.imshow("green",image[:,:,1])
cv2.imshow("red",image[:,:,2])

#彩色图像转化灰度图
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow("gray",gray)
cv2.waitKey()

三、图像裁剪crop

#   索引号取出图像的一部分 image[x1:x2,y1:y2]
#   取得的范围是先 横行 再 纵列

#crop
import cv2
image = cv2.imread("opencv_logo.jpg")
#索引号取出图像的一部分
crop = image[10:170,40:200]#先横行后纵列
cv2.imshow("crop",crop)
cv2.waitKey()

四、图像绘制draw

#   需要numpy库 
#   先创建黑色幕布 np.zeros([300,300,3],dtype=np.uint8)

#画线 cv2.line(draw,(x1,y1),(x2,y2),(#b,#g,#r),#width)

#画矩形 cv2.rectangle(draw,(x1,y1),(x4,y4),(#b,#g,#r),#width)

#画圆 cv2.circle(draw,(x,y),r,,(#b,#g,#r),#width)

#输出文本 cv2.putText(draw," ",(x,y),0,1,(#b,#g,#r),#width,0)

#draw
import cv2
import numpy as np
#创造一个300x300的黑色画布
draw = np.zeros([300,300,3],dtype=np.uint8)#无符号8位整数
#画线
cv2.line(draw,(100,200),(250,250),(255,0,0),2)#起点坐标,重点坐标,颜色,线段粗细
#画矩形
cv2.rectangle(draw,(30,100),(60,150),(0,255,0),2)#第1个顶点坐标,矩形的对角坐标,颜色,线段粗细
#画圆形
cv2.circle(draw,(150,100),20,(0,0,255),2)#圆心坐标,半径,颜色,线段粗细
#打印文字
cv2.putText(draw,"hello",(100,50),0,1,(255,255,255),2,0)#文字内容,坐标,字体序号,缩放系数,颜色,线段粗细,线条类型
cv2.imshow("draw",draw)
cv2.waitKey()

五、图像均值滤波blur

#高斯滤波 cv2.GaussianBlur()

#中值滤波 cv2.medianBlur()

#blur
import cv2
#用均值滤波器来处理图像中的噪点
image = cv2.imread("plane.jpg")
#高斯滤波器
gauss = cv2.GaussianBlur(image,(5,5),0)#高斯内核(ksize.width和ksize.height),sigmaX X方向上的高斯核标准偏差
#中值滤波器
median = cv2.medianBlur(image,5)#内核
#索引号取出图像的一部分
cv2.imshow("image",image)
cv2.imshow("gauss",gauss)
cv2.imshow("median",median)
cv2.waitKey()

六、图像特征提取corner

#需要灰度图像 cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#获取图像特征点 cv2.goodFeaturesToTrack()

#用ravel()方法将数组a拉成一维数组

#corner
import cv2
image = cv2.imread("opencv_logo.jpg")
#转化为灰度图
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#获取图像特征点
corners = cv2.goodFeaturesToTrack(gray,500,0.1,10)#多少个点,点的质量优于,特征点之间的距离大于
#找到特征点之后,把每一个点标记出来
for corner in corners:
    x,y = corner.ravel()
    cv2.circle(image,(int(x),int(y)),3,(255,0,255),-1)
#索引号取出图像的一部分
cv2.imshow("corners",image)
cv2.waitKey()

七、图像匹配match(1:1大小)

#需要numpy 灰度图

# cv2.matchTemplate()

#match
import cv2
import numpy as np
image = cv2.imread("poker.jpg")
#转化为灰度图
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#选取区域
template = gray[75:105,235:265]
#找到特征点之后,把每一个点标记出来
match = cv2.matchTemplate(gray,template,cv2.TM_CCOEFF_NORMED)#样本,模板,标准匹配算法
#找出匹配系数大于0.9的点
locations = np.where(match>=0.9)
#求出模板的长和宽,方便做图
w,h = template.shape[0:2]
#循环遍历每一个匹配点,在原始图像上画出每一个矩形框
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)
cv2.imshow("match",image)
cv2.waitKey()

八、图像梯度算法gradient

#   主要用来检测边缘
#   水平的明暗变化和垂直的明暗变化,相邻像素之差
#   得到的图像,均匀的地方是黑色,有变化的是白色

#laplacian cv2.Laplacian()

#canny cv2.Canny()

#gradient
import cv2
#梯度算法需要灰度图
gray = cv2.imread("opencv_logo.jpg",cv2.IMREAD_GRAYSCALE)
#拉普拉斯算子,得到原图像的二级导数
laplacian = cv2.Laplacian(gray,cv2.CV_64F)
#canny边缘检测
#   用梯度区间来检测边缘,大于或小于区间的都是边缘
canny = cv2.Canny(gray,100,200)
cv2.imshow("gray",gray)
cv2.imshow("laplacian",laplacian)
cv2.imshow("canny",canny)
cv2.waitKey()

九、图像阈值(二值化)threshold

#   门槛下是黑色,门槛上是白色
#   把连续分布的灰度图,切割为黑和白

#需要灰度图

#全局二值化 cv2.threshold()

#局部二值化 cv2.adaptiveThreshold()

#OTSU算法 cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

#threshold
import cv2
#得到灰度图
gray = cv2.imread("bookpage.jpg",cv2.IMREAD_GRAYSCALE)
#全局二值化
ret,binary = cv2.threshold(gray,10,255,cv2.THRESH_BINARY)#阈值,最大灰度
#(局部)自适应算法,可以分区域的改变图片的阈值,独立计算阈值
binary_adaptive = cv2.adaptiveThreshold(
    gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1)#区域大小的像素,自适应阈值算法,阈值类型,邻域块大小
#最大类间方差法(OTSU)
#   聚类分析算法
#   自动计算恰当的阈值,使得两个灰度差异最大化
ret1,binary_ostu = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("gray",gray)
cv2.imshow("binary",binary)
cv2.imshow("binary_adaptive",binary_adaptive)
cv2.imshow("binary_ostu",binary_ostu)
cv2.waitKey()

十、图像形态学之腐蚀和膨胀morphology

#需要numpy 灰度图 全局二值化 

#需要卷积内核  np.ones((5,5),np.uint8)

#腐蚀 cv2.erode()

#膨胀  cv2.dilate()

#morphology
import cv2
import numpy as np
#   用来清理图像边缘细节
#得到灰度图
gray = cv2.imread("opencv_logo.jpg",cv2.IMREAD_GRAYSCALE)
#全局二值化
_,binary = cv2.threshold(gray,200,255,cv2.THRESH_BINARY_INV)#反向阈值(改后和未改前的颜色相反)
#卷积内核
kernel = np.ones((5,5),np.uint8)
#腐蚀
erosion = cv2.erode(binary,kernel)
#膨胀
dilation = cv2.dilate(binary,kernel)

cv2.imshow("binary",binary)
cv2.imshow("erosion",erosion)
cv2.imshow("dilation",dilation)
cv2.waitKey()

十一、调用电脑摄像头camera

#捕捉特点 cv2.VideoCapture()

#capture.read()

#释放capture指针 capture.release()

#camera
capture = cv2.VideoCapture(0)#设备管理器 查看摄像头序号
#摄像是要循环读取每一帧的画面
#得到灰度图
while True:
    ret,frame = capture.read()
    cv2.imshow("camera",frame)
    key = cv2.waitKey(1)#等待键盘输入,时间为1ms
    #如果输入任意键,则值不为-1,就结束播放
    if key != -1:
        break
#释放capture指针
capture.release()

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yatingliu2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值