您的位置: 首页 - 站长

discuz 科技网站模板帝国cms网站搬家教程

当前位置: 首页 > news >正文

discuz 科技网站模板,帝国cms网站搬家教程,h5视频直播,网站建设合同注意图像灰度 彩色图像转化为灰度图像的过程是图像的灰度化处理。彩色图像中的每个像素的颜色由R#xff0c;G#xff0c;B三个分量决定#xff0c;而每个分量中可取值0-255#xff0c;这样一个像素点可以有256*256*256变化。而灰度图像是R#xff0c;G#xff0c;B三个分量… 图像灰度 彩色图像转化为灰度图像的过程是图像的灰度化处理。彩色图像中的每个像素的颜色由RGB三个分量决定而每个分量中可取值0-255这样一个像素点可以有256*256*256变化。而灰度图像是RGB三个分量相同的一种特殊的彩色图像其中一个像素点的变化范围为256种。灰度图像的描述与彩色图像一样仍然反映了整副图像的整体和局部的色度和高亮等级的分布和特征。 在OpenCV中用cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)来实现对图像进行灰度化处理。 import cv2 import rclpy from rclpy.node import Node import numpy as np from ament_index_python.packages import get_package_share_directory #获取shares目录绝对路径class OpenCVNode(Node):def readImg(self,img_name: str):default_image_path get_package_share_directory(yahboom_esp32ai_car)/resource/img_nameself.get_logger().info(f打开图片:{default_image_path})img cv2.imread(default_image_path)self.get_logger().info(fimage shape:{img.shape})#灰度gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imshow(src,img)cv2.imshow(gray,gray)cv2.waitKey(0)def main():rclpy.init()node OpenCVNode(opencvNode)node.readImg(2.jpg) rclpy.spin(node)rclpy.shutdown() 效果 OpenCV图像二值化处理 给定阈值大于阈值的为0黑色或 255白色使图像称为黑白图。阈值可固定也可以自适应阈值。自适应阈值一般为一点像素与这点为中序的区域像素平均值或者高斯分布加权和的比较。 cv2.thresholdsrc, threshold, maxValue, thresholdType 参数含义 src原图像 threshold当前阈值 maxVal最大阈值一般为255 thresholdType阈值类型 cv.THRESH_BINARYcv.THRESH_BINARY_INVcv.THRESH_TRUNCcv.THRESH_TOZEROcv.THRESH_TOZERO_INV 返回值 retval与参数thresh一致 dst 结果图像 import cv2 import rclpy from rclpy.node import Node import numpy as np from ament_index_python.packages import get_package_share_directory #获取shares目录绝对路径class OpenCVNode(Node):def readImg(self,img_name: str):default_image_path get_package_share_directory(yahboom_esp32ai_car)/resource/img_nameself.get_logger().info(f打开图片:{default_image_path})src cv2.imread(default_image_path)#灰度img cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)ret,thresh1 cv2.threshold(img,127,255,cv2.THRESH_BINARY)ret,thresh2 cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)ret,thresh3 cv2.threshold(img,127,255,cv2.THRESH_TRUNC)ret,thresh4 cv2.threshold(img,127,255,cv2.THRESH_TOZERO)ret,thresh5 cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)cv2.imshow(gray,img)cv2.imshow(BINARY,thresh1)cv2.imshow(BINARY_INV,thresh2)cv2.imshow(TRUNC,thresh3)cv2.imshow(TOZERO,thresh4)cv2.imshow(TOZERO_INV,thresh5)cv2.waitKey(0)def main():rclpy.init()node OpenCVNode(opencvNode)node.readImg(1.jpg) rclpy.spin(node)rclpy.shutdown() 效果如下 图像边缘检测 边缘检测是识别出图像中亮度变化剧烈的像素点构成的集合。图像边缘的正确检测对于分析图像中的内容、实现图像中物体的分割、定位等具有重要的作用。边缘检测大大减少了源图像的数据量显著减少图像的数据规模。主要是从数学角度去分类简单了解下背景如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数函数值的变化趋势可以用函数的导数描述图像的边缘对应在灰度值函数中是函数值突然变大的区域进而确定图像中的边缘位置。 分类如下 一阶导数的边缘检测算子:通过计算图像的梯度值来检测图像的边缘常见的有Roberts算子、Sobel算子和Prewitt算子。 二阶导数的边缘算子:通过寻求二阶导数中的过零点来检测边缘常见的有Laplacian 算子此类算子对噪声敏感。 其他边缘算子:前面两类均是通过微分算子来检测图像边缘还有一种就是Canny算子其是在满足一定约束条件下推导出来的边缘检测最优化算子。 目前有多种算法可以进行边缘检测虽然Canny算法年代久远但可以说它是边缘检测的一种标准算法而且仍在研究中广泛使用。 Canny算子的简要步骤如下 1去噪声应用高斯滤波来平滑图像目的是去除噪声 2梯度找寻图像的梯度 3非极大值抑制应用非最大抑制技术来过滤掉非边缘像素将模糊的边界变得清晰。该过程保留了每个像素点上梯度强度的极大值过滤掉其他的值。 4应用双阈值的方法来区分强边缘和弱边缘 5利用滞后技术来跟踪边界。若某一像素位置和强边界相连的弱边界认为是边界其他的弱边界则被删除。 背后有很多数学推导过程网上很多大佬写文章介绍还有很多深度展开调整参数的。 https://blog.csdn.net/zaishuiyifangxym/article/details/90142702 https://zhuanlan.zhihu.com/p/447565904 https://zhuanlan.zhihu.com/p/99959996 看下OpenCV里面canny算法的实现步骤 .Canny方法处理得到图像edgescv2.Canny( image, threshold1, threshold2[, apertureSize[, L2gradient]]) 参数含义 edges计算得到的边缘图像 image 计算得到的边缘图像一般是高斯处理后得到的图像 threshold1 处理过程中的第一个阈值 threshold2 处理过程中的第二个阈值 apertureSize Sobel 算子的孔径大小 import cv2 import rclpy from rclpy.node import Node import numpy as np from ament_index_python.packages import get_package_share_directory #获取shares目录绝对路径class OpenCVNode(Node):def readImg(self,img_name: str):default_image_path get_package_share_directory(yahboom_esp32ai_car)/resource/img_nameself.get_logger().info(f打开图片:{default_image_path})img cv2.imread(default_image_path)#灰度gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#高斯降噪gaussian cv2.GaussianBlur(gray, (5, 5), 0)# Canny算子Canny50 cv2.Canny(gaussian, 50, 50)Canny100 cv2.Canny(gaussian, 50, 100)Canny150 cv2.Canny(gaussian, 50, 150)#cv2.imshow(gray,gray)cv2.imshow(Canny50,Canny50)cv2.imshow(Canny100,Canny100)cv2.imshow(Canny150,Canny150)cv2.waitKey(0)def main():rclpy.init()node OpenCVNode(opencvNode)node.readImg(e.jpg) rclpy.spin(node)rclpy.shutdown() 通过调整canny参数可见效果不同第二个阈值越大图片丢失细节越多。 OpenCV绘制图形 划线 cv2.linedstpt1pt2colorthicknessNonelineTypeNoneshiftNone函数进行线段的绘制。 参数含义 dst输出图像。 pt1pt2必选参数。线段的坐标点分别表示起始点和终止点 color必选参数。用于设置线段的颜色 thickness可选参数。用于设置线段的宽度 lineType可选参数。用于设置线段的类型可选88邻接连接线-默认、44邻接连接线和cv2.LINE_AA 为抗锯齿 画矩形 cv2.rectangleimgpt1pt2colorthicknessNonelineTypeNoneshiftNone 参数含义 img画布或者载体图像 pt1pt2必选参数。矩形的顶点分别表示顶点与对角顶点即矩形的左上角与右下角这两个顶点可以确定一个唯一的矩形可以理解成是对角线。 color必选参数。用于设置矩形的颜色 画圆 cv2.circle(img, center, radius, color[,thickness[,lineType]]) 参数含义 img:画或者载体图像布 center为圆心坐标格式 50,50 radius半径 thickness 线条粗细。默认为1.如果-1则为填充实心 lineType线条类型。 画椭圆 cv2.ellipse(img, center, axes, angle, StartAngle, endAngle, color[,thickness[,lineType] 参数含义 center椭圆的中心点xy axes指的是短半径和长半径xy StartAngle圆弧起始角的角度 endAngle圆弧终结角的角度 画多边形 cv2.polylines(img,[pts],isClosed, color[,thickness[,lineType]]) 参数含义 pts多边形的顶点 isClosed是否闭合。True/False 文字 cv2.putText(img, str, origin, font, size,color,thickness) 参数含义 img输入图像 str绘制的文字 origin左上角坐标(整数)可以理解成文字是从哪里开始的 font字体 size字体大小 color字体颜色 thickness字体粗细 import cv2 import rclpy from rclpy.node import Node import numpy as np from ament_index_python.packages import get_package_share_directory #获取shares目录绝对路径class OpenCVNode(Node):def readImg(self,img_name: str):default_image_path get_package_share_directory(yahboom_esp32ai_car)/resource/img_nameself.get_logger().info(f打开图片:{default_image_path})img cv2.imread(default_image_path)#划线line cv2.line(img, (50,20), (20,100), (255,0,255), 10)#画矩形rect cv2.rectangle(img, (110,50), (200,200), (255,0,255), 10)#画圆circle cv2.circle(img, (280,120), 50, (255,0,255), 10)#画椭圆ellipse cv2.ellipse(img, (400,120), (20,50),0,0, 360,(255,0,255), 5)# textcv2.putText(img,bohu text test,(50,550),cv2.FONT_HERSHEY_SIMPLEX,1,(0,200,0),2)#多边形points np.array([[120,250], [340,440], [350,410], [250,250]], np.int32)cv2.polylines(img, [points],True,(255,0,255), 5)cv2.imshow(gray,img)cv2.waitKey(0)def main():rclpy.init()node OpenCVNode(opencvNode)node.readImg(e.jpg) rclpy.spin(node)rclpy.shutdown()