OpenCV 图像处理模块(imgproc)
参考:《计算机视觉开发实践》朱文伟 李建英 著

前言

imgproc的模块名称是由image(图像)和process(处理)两个单词的缩写组合而成的,是重要的图像处理模块,主要包括图像滤波、几何变换、直方图、特征检测与目标检测等。
这个模块包含一系列的常用图像处理算法。相对而言,imgproc是OpenCV一个比较复杂的模块。
OpenCV中的一些画图函数也属于这个模块。


5.1 颜色变换 cvtColor

函数:
cv.cvtColor(src, code[, dst[, dstCn]])

参数说明:

  • src:输入图像,即要进行颜色空间变换的原图像,可以是数组矩阵。
  • code:颜色空间转换代码,即在此确定将什么制式的图片转换成什么制式的图片。
  • dst:输出图像,即进行颜色空间变换后存储图像。
  • dstCn:目标图像的通道数,默认取值为0,如果参数为0,则从src和代码自动获得通道的数量。

说明:
函数cvtColor的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是从RGB向其他类型转换时必须明确指出图像的颜色通道。
值得注意的是,在OpenCV中,其默认的颜色制式排列是BGR而非RGB。对于24位颜色图像来说,前8位是蓝色,中间8位是绿色,最后8位是红色

示例代码:

import cv2
img = cv2.imread('test.jpg')
# 将BGR图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 将BGR图像转换为HSV图像
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Gray', gray)
cv2.imshow('HSV', hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.2 基本图像绘制

矩形

函数:
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]] ) -> img

参数说明:

  • img:要绘制图形的图像,可以是数组矩阵。
  • pt1, pt2:矩形的左上角和右下角坐标。
  • color:矩形的颜色,可以是BGR格式的元组。
  • thickness:矩形边框的线宽,负值表示填充矩形。
  • lineType:线条类型,默认值为8(8-connected line)。
  • shift:坐标点的小数位数。

直线

函数:
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]] ) -> img

参数说明:

  • img:要绘制图形的图像,可以是数组矩阵。
  • pt1, pt2:直线的起点和终点坐标。
  • color:直线的颜色,可以是BGR格式的元组。
  • thickness:直线的线宽。
  • lineType:线条类型,默认值为8(8-connected line)。
  • shift:坐标点的小数位数。

圆形

函数:
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]] ) -> img

参数说明:

  • img:要绘制图形的图像,可以是数组矩阵。
  • center:圆心坐标。
  • radius:圆的半径。
  • color:圆的颜色,可以是BGR格式的元组。
  • thickness:圆边框的线宽,负值表示填充圆。
  • lineType:线条类型,默认值为8(8-connected line)。
  • shift:坐标点的小数位数。

多边形

函数:
cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]] ) -> img

参数说明:

  • img:要绘制图形的图像,可以是数组矩阵。
  • pts:多边形的顶点坐标列表。
  • isClosed:布尔值,表示多边形是否闭合。
  • color:多边形的颜色,可以是BGR格式的元组。
  • thickness:多边形边框的线宽。
  • lineType:线条类型,默认值为8(8-connected line)。
  • shift:坐标点的小数位数。

5.3 文字绘制

函数:
cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) -> img

参数说明:

  • img:要绘制文字的图像,可以是数组矩阵。
  • text:要绘制的文字字符串。
  • org:文字的左下角坐标。
  • fontFace:字体类型,如cv2.FONT_HERSHEY_SIMPLEX等。
  • fontScale:字体缩放因子。
  • color:文字颜色,可以是BGR格式的元组。
  • thickness:文字线宽。
  • lineType:线条类型,默认值为8(8-connected line)。
  • bottomLeftOrigin:布尔值,表示文字基线是否在左下角。

注意:
putText函数的text参数只能接收特定字符,也就是说并不是所有的字符串都能顺利绘制。
例如,当text参数内容中包含中文时,运行结果中的中文会被“?”等字符替换,原因就是putText函数无法识别中文。如果想在图像中绘制中文文字,就需要借助其他模块或第三方库(PIL库和freetype库)的帮助。


5.4 边缘填充

这个需要另开一章来详细讲解,暂时留个坑,先说常用的几个边界类型:

  • BORDER_REPLICATE
    复制法,边界复制会将边界处的像素值进行复制,然后作为边界填充的像素值。中值滤波就是采用的这种方法。
  • BORDER_REFLECT
    反射法,根据原图的边缘进行反射。
  • BORDER_REFLECT_101
    对称法,与边界反射不同的是,不再反射边缘的像素点。高斯滤波边界处理的默认方法。
  • BORDER_WRAP
    环绕法,复制图像进行滑动填充。
  • BORDER_CONSTANT
    常量法,使用指定的常量值填充边界区域。

5.5 图像轮廓

轮廓是指图像中具有相似强度或颜色的像素点的集合,通常用于表示物体的边界或形状。
在OpenCV中,轮廓可以通过边缘检测算法(如Canny算法)或阈值分割等方法提取出来。

提取轮廓

函数:
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

参数说明:

  • image:输入的二值图像,通常是经过边缘检测或阈值分割后的图像。
  • mode:轮廓检索模式,如cv2.RETR_EXTERNAL(只检索外部轮廓)等。
  • method:轮廓近似方法,如cv2.CHAIN_APPROX_SIMPLE(压缩水平方向、垂直方向和对角线方向的冗余点)等。
  • contours:输出的轮廓列表,每个轮廓都是一个点的集合。
  • hierarchy:输出的轮廓层级关系。
  • offset:可选参数,表示轮廓点的偏移量。

绘制轮廓

函数:
cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]) -> image

参数说明:

  • image:要绘制轮廓的图像,可以是数组矩阵。
  • contours:轮廓列表,通常是通过findContours函数获得的。
  • contourIdx:要绘制的轮廓索引,
  • color:轮廓的颜色,可以是BGR格式的元组。
  • thickness:轮廓线宽。
  • lineType:线条类型,默认值为8(8-connected line)。
  • hierarchy:轮廓层级关系,通常是通过findContours函数获得的。
  • maxLevel:绘制轮廓的最大层级。
  • offset:可选参数,表示轮廓点的偏移量。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇