基本函数

  • cv2.line(img,(x_start,y_start),(x_end,y_end),'color',thickness,linetype)
    • 第1个参数:表示需要画线的图
    • 第2个参数:直线的起点,是一个元祖。
    • 第3个参数:重点,是一个元祖
    • 第4个参数:线的颜色,比如:(0,255,0)表示绿色。
    • 第5个参数:线宽,默认为1,如果是闭合图形设置为-1,将填充闭合区域
    • 第6个参数:线条类型,8连接,抗锯齿等。默认情况是8连接。cv2.LINE_AA为抗锯齿,这样看起来会很平滑。
  • cv2.rectangle(img,(x_lefttop,y_lefttop),(x_rightbottom,y_rightbottem),'color',thickness,linetype) 和绘制直线的参数基本一致,绘制矩形的时候是给定左上角点和右下角点坐标。
  • cv2.circle(img,(center_x,center_y),radius,'color','thickness') 其他参数一样,不同在于圆由圆心和半径组成。
  • cv2.ellipse(img,(center_x,center_y),(longax,shortax),rotate_inv_degree,start_degree,end_degree,'color','thickness') 和绘制圆形一致,不同在于:
    • (center_x,center_y):表示椭圆中心
    • (longax,shortax):表示长短轴的长度
    • rotate_inv_degree:表示椭圆逆时针旋转的角度(椭圆沿着圆心逆时针旋转的角度)
    • start_degree:顺时针方向的起始角度
    • end_degree顺时针方向的结束角度
  • cv2.polylines(img,[point_list],'color','thickness') 可以被用来画很多条线。只需要把想要画的线放在一 个列表中,将这个列表传给函数就可以了。
    • [point_list]:是多点组成的二维列表,每一个元素表示一个坐标x,y,x,y的数据类型必须是np.int32。
    • cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]):
    • img :需要绘制的图像
    • text:书写文字的内容(str)
    • org:书写文字的位置
    • fontFace:字体的类型
    • fontScale:字体的大小
    • color:文字的颜色
    • thickness:文字粗细
    • linetype:字体的类型。设置为linetype=cv2.LINE_AA

字体类型介绍

种类 说明
FONT_HERSHEY_SIMPLEX normal size sans-serif font
FONT_HERSHEY_PLAIN small size sans-serif font
FONT_HERSHEY_DUPLEX normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)
FONT_HERSHEY_COMPLEX normal size serif font
FONT_HERSHEY_TRIPLEX normal size serif font (more complex than FONT_HERSHEY_COMPLEX)
FONT_HERSHEY_COMPLEX_SMALL smaller version of FONT_HERSHEY_COMPLEX
FONT_HERSHEY_SCRIPT_SIMPLEX hand-writing style font
FONT_HERSHEY_SCRIPT_COMPLEX more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX
FONT_ITALIC flag for italic font

核心图像处理函数

cv2.HoughCircles(image, method, dp, minDist)

  • image:8位单通道图像。如果传入彩色图像,首先应该转化成灰度图。
  • method:定义检测圆的方法。当前,唯一实现的方法是cv2.HOUGH_GRADIENT,
  • dp:用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。上述文字不好理解的话,来看例子吧。例如,如果dp= 1时,累加器和输入图像具有相同的分辨率。如果dp=2,累加器便有输入图像一半那么大的宽度和高度。
  • minDist:为霍夫变换检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离。这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆。反之,这个参数设置太大的话,某些圆就不能被检测出来了。
  • param1:默认值为100,它是第三个参数methond设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度方法。
  • params2,默认值为100,它是第三个参数method设置的检测方法对应的参数。当前唯一的方法是霍夫梯度法
  • minRadius:默认值为0,表示圆的最小半径。
  • maxRadius:默认值为0,表示圆半径的最大值。
  • cv2.resize(img,dim,iterpolation)
    • img:需要resize处理的图像
    • dim:二元组,resize的维度,只需要宽和高,不需要通道信息
    • iterpolation:插值方法,常用cv2.INTER_AREA,(注意img.shape显示的尺寸为高和宽)
  • 图像的旋转
    • M = cv2.getRotationMatrix2D(point,degree,scale):生成旋转矩阵
    • point:围绕旋转的点
    • degree:围绕旋转的角度
    • scale:围绕缩放的比率
    • cv2.warpAffine(img,M,(w,h))
    • img:需要旋转的图片
    • M:旋转矩阵
    • (w,h):旋转后新图像的维度

      视频部分

  • 使用摄像头捕获视频
    • 创建cv2.VideoCaptrue(index):index表示摄像头索引,为0表示摄像头为内置摄像头,为1或者其它表示外置摄像头。 此对象相关的函数
    • cap.read()返回一个bool值False/True。如果读取正确则为True,否则为False。最口能通过它检查视频文件是否已经到了结尾,不检查摄像头是否初始化。
    • cap.isOpened()检查是否初始化成功。如果返回为True则初始化成功。否则需要使用cap.open()打开摄像头。
    • cap.get(propId):获取视频的一些参数信息。这个propId可以是0-18之间的任何整数。每个数代表视频的一个属性。cap.get(3):视频的宽,cap.get(4):视频的高。详细参数介绍见下表。
    • cap.set(propId,value):设置视频参数,value是新设置的值
参数 说明
CV_CAP_PROP_POS_MSEC 当前视频文件的位置,单位为毫秒
CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next
CV_CAP_PROP_POS_AVI_RATIO 视频的相对位置0表示视频的开始1,表示视频的结束
CV_CAP_PROP_FRAME_WIDTH 视频流中帧的宽度
CV_CAP_PROP_FRAME_HEIGHT 视频流中帧的高度
CV_CAP_PROP_FPS 视频的帧率
CV_CAP_PROP_FOURCC 4字符的编码器
CV_CAP_PROP_FRAME_COUNT 视频文件的帧数
CV_CAP_PROP_FORMAT retrieve()返回的矩阵对象
CV_CAP_PROP_MODE 表示当前捕获模式的
CV_CAP_PROP_BRIGHTNESS 图像的亮度 (only for cameras).
CV_CAP_PROP_CONTRAST 图像的亮度(only for cameras).
CV_CAP_PROP_SATURATION 图像的饱和度(only for cameras).
CV_CAP_PROP_HUE 图像的色调(only for cameras).
CV_CAP_PROP_GAIN 图像的增益(only for cameras).
CV_CAP_PROP_EXPOSURE 曝光(only for cameras).
CV_CAP_PROP_CONVERT_RGB bool值,表明图像是否应该转化为RGB
CV_CAP_PROP_WHITE_BALANCE 目前不支持
CV_CAP_PROP_RECTIFICATION 仅仅用于立体摄像头(note: only supported by DC1394 v 2.x backend cur-rently)
  • cv2.VideoWriter_fourcc(*'XVID') 保存视频的时候需要创建cv2.VideoWriter对象,指定输出文件的名字,接下来指定编码。播放的频率和帧率都需要切丁。最后是isColor,如果是True,每一帧就是彩色图,否则为灰度图。FourCC是一个4字节码,用来切丁视频的编码格式。可用的编码列表可以从fourcc.org查到 在通常XVID比较合适,MJPG生成视频文件比较大,X264生成视频文件比较小。 这里的编码设置fourcc = cv2.VideoWriter_fourcc(*'XVID')也可多写成fourcc = cv2.VideoWriter_fourcc('X','V','I','D') 示例代码
  • cv2.calcHist(img,channels,mask,histSize,ranges):

    • img:统计直方图信息的图像
    • channel:指定想要计算直方图的通道索引,计算灰度图的直方图这个列表为[0],计算rgb通道的直方图,值应该为[0,1,2]
    • mask:一个mask一个uint8图像,形状和原始形状一样大,像素值为0的被忽略,像素值大于0的包含在直方图的计算中。使用mask允许我们计算图像区域的直方图,不需要的话可以设置为None。
    • histSize:你想计算直方图的bin的个数。bin不是必须相同,比如[32,32,32]设置每个通道的bin数量为30
    • range:可能像素的范围,正常是[0,256],但是如果你使用想HSV空间,将有点不同。

    orb检测

import cv2

img = cv2.imread('box.png',0) # queryImage
orb = cv2.ORB_create()        # Initiate SIFT detector

# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img, None)

results matching ""

    No results matching ""