OpenCV-python 的学习笔记

OpenCV-python 的学习笔记

对图片的操作

import cv2
cv2.namedWindow("Image")#create a window
test1 = cv2.imread('test.png',-1) #变量=cv2.imread("",attr)attr= 1为默认-彩色,0为黑白,-1为图片原始
cv2.imshow("Image",test1)
cv2.waitKey(0) #无限等待,直至有键盘输入
cv2.destroyAllWindows()#cv2.destroyWindow("name")

调用摄像头

import cv2
import numpy as np #Numpy is a optimized library for fast array calculations. So simply accessing each and every pixel values and modifying it will be very slow and it is discouraged.例如用XX.item()与XX.itemset()来访问和设置图像像素值
cam = cv2.VideoCapture(0) #VideoCapture() 参数=0,打开电脑的内置摄像头 也可以是路径cam = cv2.VideoCapture("../video")
while(cv2.waitKey(1)==-1): #若无按键按下waitkey(num)返回值都是1,让num=1表示等待1ms
    process,frame = cam.read() #A,B=cam.read A返回布尔值,有图像为1,无图像(视频结束)为0;B为当前帧的BGR
    cv2.imshow('Video',frame)
cam.release()
cv2.destroyAllWindows()

膨胀与腐蚀

retval = erode(const Mat &src, Mat &dst, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)

retval = dilate(const Mat &src, Mat &dst, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)

src:输入图。(需要先用cv2.imread()获取BGR矩阵形式)
kernel:结构元素,如果kernel=Mat()则预设为3×3矩形,越大腐蚀(膨胀)效果越明显。
anchor:原点位置。
iterations:腐蚀(膨胀)的执行次数。

对于kernel可用getStructuringElement()在腐蚀或膨胀之前设定自己想要的结构形态。

retval = cv.getStructuringElement(int shape, ksize, anchor = Point(-1, -1));


其中这个shape参数表示内核的形状,有三种形状可以选择。
矩形:MORPH_RECT;
交叉形:MORPH_CROSS;
椭圆形:MORPH_ELLIPSE;

轮廓与绘制

ret, binary = cv2.threshold(mask,100,255,cv2.THRESH_BINARY)#二值化
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_TC89_L1)
cv2.drawContours(png, contours, -1, color=green, thickness=3)

首先需要将之前的掩膜二值化,因为cv2.findContours()函数对输入参数有要求。
之后分别是用cv2.findContours()找到边界的坐标,以及用cv2.drawContours()绘制边界。

二值化

ret, dst = cv2.threshold(src, thresh, maxval,type)
src: 原始图像,只能输入单通道图像,通常来说为灰度图;
thresh: 阈值(下限);
maxval: 上限
type:二值化操作的类型,有一下五种:
cv2.THRESH_BINARY;
cv2.THRESH_BINARY_INV;
cv2.THRESH_TRUNC;
cv2.THRESH_TOZERO;
cv2.THRESH_TOZERO_IN

找轮廓

_, contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])
image:原图像(需要提前二值化)
mode:轮廓的检索模式:

cv2.RETR_EXTERNAL表示只检测外轮廓
cv2.RETR_LIST检测的轮廓不建立等级关系
cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE建立一个等级树结构的轮廓。

method:轮廓的近似办法

cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标
cv2.CHAIN_APPROX_TC89_L1
CV_CHAIN_APPROX_TC89_KCOS
画轮廓

cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset ]]]]])
image:指定在哪幅图上绘制
contours:是一个list,也就是找轮廓生成到轮廓的坐标
contourldx: 通常是-1,表示全部的轮廓
后面的就是颜色宽度之类的了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值