高质量的常州网站建设,jae wordpress,微信商城开店需要费用吗,秦皇岛网站制作哪家好一、颜色变换cvtColor
dst cv2.cvtColor(src, code[, dstCn[, dst]])
src: 输入图像#xff0c;即要进行颜色空间转换的原始图像。code: 转换代码#xff0c;指定要执行的颜色空间转换类型。这是一个必需的参数#xff0c;决定了源颜色空间到目标颜色空间的转换方式。dst…
一、颜色变换cvtColor
dst cv2.cvtColor(src, code[, dstCn[, dst]])
src: 输入图像即要进行颜色空间转换的原始图像。code: 转换代码指定要执行的颜色空间转换类型。这是一个必需的参数决定了源颜色空间到目标颜色空间的转换方式。dstCn (可选): 目标图像的通道数如果参数是0则从src和code自动推导。dst (可选): 输出图像与src具有相同的大小和深度。
转换代码code
cv2.COLOR_BGR2GRAY: 将图像从BGR颜色空间转换到灰度空间。这是最常用的转换之一因为灰度图像处理起来通常比彩色图像要快而且在某些情况下如边缘检测效果也很好。cv2.COLOR_BGR2HSV: 将图像从BGR颜色空间转换到HSV颜色空间。HSV色调、饱和度、亮度颜色空间对于处理与颜色相关的任务如颜色跟踪非常有用。cv2.COLOR_BGR2RGB: 将图像从BGR颜色空间转换到RGB颜色空间。这在需要将图像用于某些只接受RGB图像的库或框架时很有用。cv2.COLOR_HSV2BGR: 将图像从HSV颜色空间转换回BGR颜色空间。cv2.COLOR_GRAY2BGR: 将灰度图像转换为BGR图像。虽然这通常不是一个实用的转换因为结果图像将是单色的但在某些情况下可能有用。 注意事项
1、cvtColor不能直接将RGB图像转换为二值图像需要借助threshold函数。
2、如果对8bit图像使用cvtColor函数进行转换将会丢失一些信息。
二、画基本图形 画点直接使用Numpy中的arr[xy] number即可
画矩形cv2.rectangle()
import cv2 # 读取图像
image cv2.imread(your_image.jpg) # 绘制矩形的参数
# (左上角x坐标, 左上角y坐标, 右下角x坐标, 右下角y坐标), (B, G, R), 线条粗细
# 注意OpenCV中图像坐标系的原点在左上角x向右增加y向下增加
# BGR颜色格式与常见的RGB相反
rect_coords (50, 50, 200, 200)
color (0, 255, 0) # 绿色
thickness 2 # 线条粗细 # 在图像上画矩形
cv2.rectangle(image, rect_coords[0:2], rect_coords[2:4], color, thickness) # 显示图像
cv2.imshow(Rectangle, image) # 等待按键事件
cv2.waitKey(0) # 销毁所有OpenCV创建的窗口
cv2.destroyAllWindows()
img: 输入的图像矩阵。pt1: 矩形的左上角顶点坐标格式为(x,y)。pt2: 矩形的右下角顶点坐标格式为(x,y)。注意这两个点的次序可以互换但绘制时会自动调整为左上角和右下角。color: 矩形的颜色可以是RGB元组或灰度值。thickness: 矩形边框的宽度默认为1。若设为-1则表示绘制的是填充的矩形。lineType: 线条的类型默认为cv2.LINE_8。shift: 指定坐标点小数位数默认为0。
画圆cv2.circle()
img: 输入的图像矩阵。center: 圆心的坐标格式为(x,y)。radius: 圆的半径。color: 圆的颜色可以是RGB元组或灰度值。thickness: 圆的边框宽度默认为1。若设为-1则表示绘制的是填充的圆。lineType: 线条的类型默认为cv2.LINE_8。shift: 指定坐标点小数位数默认为0。
画直线cv2.line()
img: 输入的图像矩阵。pt1: 直线的起点坐标格式为(x,y)。pt2: 直线的终点坐标格式为(x,y)。color: 直线的颜色可以是RGB元组或灰度值。thickness: 线条的粗细默认为1。若设为-1则表示绘制的是填充的矩形。lineType: 线条的类型默认为cv2.LINE_8。可选的线条类型还包括cv2.LINE_4和cv2.LINE_AA后者为抗锯齿线型使线条看起来更平滑。shift: 指定坐标点小数位数默认为0。
画椭圆cv2.ellipse()
img: 输入的图像矩阵。center: 椭圆中心的坐标格式为(x,y)。axes: 椭圆横轴和纵轴的一半长度格式为(major_axis_radius, minor_axis_radius)。angle: 椭圆旋转的角度以度为单位。startAngle: 椭圆弧绘制的起始角度以度为单位。endAngle: 椭圆弧绘制的结束角度以度为单位。若startAngle和endAngle为0和360则绘制整个椭圆。color: 椭圆的颜色可以是RGB元组或灰度值。thickness: 椭圆边框的宽度默认为1。若设为-1则表示绘制的是填充的椭圆。lineType: 线条的类型默认为cv2.LINE_8。shift: 指定坐标点小数位数默认为0。
画多边形cv2.polylines()
img: 要绘制多边形的图像。pts: 多边形的顶点坐标类型为numpy.ndarray其形状应为(n,1,2)其中n为多边形的边数2表示每个点有x和y两个坐标。isClosed: 表示多边形是否封闭如果为True则表示多边形是封闭的会从最后一个点连线到第一个点。color: 多边形的颜色为(B,G,R)格式的元组或一个标量。thickness: 线条的粗细默认值为1。lineType: 线条的类型默认值为cv2.LINE_8。shift: 坐标点小数位数的位数默认为0。
画文本cv2.putText()
img: 要在其上绘制文本的图像。该图像应该是一个numpy数组通常是通过cv2.imread()函数读取的。text: 要绘制的文本字符串。这是你想要在图像上显示的实际文本内容。org: 文本字符串左下角的坐标格式为(x, y)。这是文本在图像上的起始位置。fontFace: 字体类型。OpenCV提供了一些内置的字体类型如cv2.FONT_HERSHEY_SIMPLEX、cv2.FONT_HERSHEY_PLAIN等。你可以使用这些字体类型之一但请注意OpenCV默认不支持中文字符的显示因此如果需要显示中文可能需要额外设置或使用Pillow等库。fontScale: 字体缩放比例。这个参数控制字体的大小它是一个浮点数表示字体大小与字体特定基本大小的倍数。color: 文本的颜色。颜色参数是一个BGR元组即(B, G, R)格式每个颜色分量的取值范围是0到255。thickness: 字体线条的粗细程度。这是一个整数表示线条的宽度。如果设置为负数如cv2.FILLED则表示使用填充模式绘制文本。lineType: 线条类型。这个参数控制线条的绘制方式但在cv2.putText()函数中通常不直接使用因为它默认为cv2.LINE_8。对于文本绘制这个参数的影响可能不如在其他绘图函数中那么明显。bottomLeftOrigin: 如果为True则文本起始点为左下角如果为False默认值则文本起始点为左上角。这个参数用于控制文本绘制的基准点。
import cv2 # 读取图像
img cv2.imread(image.jpg) # 设置文本参数
text Hello, OpenCV!
org (50, 50)
fontFace cv2.FONT_HERSHEY_SIMPLEX
fontScale 1
color (255, 0, 0) # 蓝色
thickness 2 # 在图像上添加文本
cv2.putText(img, text, org, fontFace, fontScale, color, thickness) # 显示图像
cv2.imshow(Image with Text, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
具体可参考这篇文章弹了个球
python opencv 常用图形绘制方法线段、矩形、圆形、椭圆、文本_plt绘制矩形与线段-CSDN博客https://blog.csdn.net/fujian87232/article/details/115556078 三、图像添加边框
dst cv2.copyMakeBorder(src, top, bottom, left, right, borderType, [, value])
src: 类型: 输入图像numpy数组。描述: 需要添加边框的原始图像。top, bottom, left, right: 类型: 整数。描述: 分别指定图像上、下、左、右四个方向需要添加的边框宽度以像素为单位。borderType: 类型: 整数OpenCV中定义的边框类型常量。描述: 指定要添加的边框类型。常见的边框类型包括 cv2.BORDER_CONSTANT: 添加常数值边框。此时需要指定value参数来确定边框的颜色。cv2.BORDER_REPLICATE: 复制图像边界的像素值。cv2.BORDER_REFLECT: 镜像反射边框会反射图像的边缘。cv2.BORDER_REFLECT_101 或 cv2.BORDER_DEFAULT: 类似于cv2.BORDER_REFLECT但最外层像素值不会被重复。cv2.BORDER_WRAP: 环绕边框类似于将图像水平或垂直方向上的像素值进行循环。value (可选): 类型: 当borderType为cv2.BORDER_CONSTANT时value是一个BGR颜色值对于彩色图像或一个灰度值对于灰度图像用于填充边框。描述: 边框的颜色或灰度值。如果borderType不是cv2.BORDER_CONSTANT则不需要此参数。
示例
cb_image cv2.copyMakeBorder(image_cut1, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value(0, 0, 255))
结果如下 四、图像查找轮廓
contours, hierarchy cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) image: 输入图像必须是二值图像通常使用 cv2.threshold() 或 cv2.Canny() 进行二值化处理。注意cv2.findContours() 会修改输入图像在 OpenCV 3.x 中返回修改后的图像但在 4.x 中不返回。 mode: 轮廓检索模式指定了轮廓的检索方式。常用的模式包括 cv2.RETR_EXTERNAL只检测外部轮廓。cv2.RETR_LIST检测所有轮廓并将它们放入列表中但不创建轮廓间的层级关系。cv2.RETR_CCOMP检测所有轮廓并将它们组织成两级层次结构顶层是外部边界二级是空洞的边界。cv2.RETR_TREE检测所有轮廓并重构嵌套轮廓的完整层级。 method: 轮廓近似方法指定了轮廓的表示方式。常用的方法包括 cv2.CHAIN_APPROX_NONE存储所有轮廓点相邻两个点的像素位置差不超过1。cv2.CHAIN_APPROX_SIMPLE压缩水平、垂直和对角方向的元素只保留端点这样可以节省内存。cv2.CHAIN_APPROX_TC89_L1 和 cv2.CHAIN_APPROX_TC89_KCOS应用 Teh-Chin 链逼近算法。 contours可选输出参数: 轮廓的点集列表。每个轮廓本身又是一个点集NumPy数组表示轮廓上点的坐标。 hierarchy可选输出参数: 轮廓的层级结构信息是一个 NumPy 数组。对于每个轮廓hierarchy 包含四个元素[next, previous, first_child, parent]分别表示轮廓中的下一个轮廓、上一个轮廓、第一个子轮廓和父轮廓的索引。如果某个元素不存在则对应位置为负值。 offset可选参数: 每个轮廓点移动的可选偏移量。通常设置为默认值 Point()。
示例
import cv2
import numpy as np# 绘图展示
def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyAllWindows()image cv2.imread(img\\1.png)
image_copy_cut image[0:500, 0:500]
cv_show(image_copy_cut, image_copy_cut)
gray_img cv2.cvtColor(image_copy_cut, cv2.COLOR_BGR2GRAY)
cv_show(gray_img, gray_img)
_, binary_image cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
cv_show(binary_image, binary_image)
# 查找轮廓
contours, hierarchy cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 在原图上绘制轮廓
cv2.drawContours(image_copy_cut, contours, -1, (0, 255, 0), 2)
cv_show(image_copy_cut, image_copy_cut)
结果如下 链接跳转
章节一、OpenCV||超细节的基本操作
章节二、OpenCV||超简略的Numpy小tip
章节四、OpenCV||超详细的灰度变换和直方图修正
章节五、OpenCV||超详细的图像平滑
章节二、OpenCV||超简略的Numpy小tip