![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
opencv学习
有了个相册
日常记录
展开
-
OpenCV——点云投影到图像中
读取一张照片和一张 pcd, 根据标定的内参和外参,将点云投影到图像中,用于判断雷达相机外参标定是否准确。:投影部分区域的点云到图像中,不要全部都投。(一般选取标定板所处位置的点云)原创 2023-06-23 10:36:18 · 2164 阅读 · 2 评论 -
OpenCV——日常学习
注意,上述代码中的“input_image.png”和“output_image.png”是您要处理的输入和输出图像的文件名。此外,您可能需要调整HoughLinesP函数的参数以获得最佳结果。首先,使用OpenCV中的线段检测函数(例如HoughLinesP)找到您要处理的图像中的两条直线。这将为您提供直线的坐标。然后,使用OpenCV中的fillPoly函数在两条直线之间创建一个多边形。此多边形将包含两条直线之间的所有像素。最后,将该多边形中所有像素的灰度值设置为255。原创 2023-05-05 16:54:13 · 75 阅读 · 0 评论 -
OpenCV——概率霍夫检测
Vec4i` 是一个长度为 4 的定长向量,分别表示直线的起点和终点坐标。- 然后调用`cv::HoughLinesP` 函数进行概率霍夫检测,检测到的直线存储在`std::vector<Vec4i>` 中。-`10`:表示最大线段间隙,同一条线段中断的间隙超过该值则会被分为两条线段。-`CV_PI / 180`:表示角度的检测步长,单位为弧度;-`50`:表示最小线段长度,小于该值的线条会被丢弃;-`1`:表示直线的检测步长,单位为像素;-`lines`:输出的直线集合;原创 2023-04-30 11:22:13 · 636 阅读 · 0 评论 -
OpenCV——裁剪
然后,我们获取图像的大小,并计算出图像下半部分的位置和大小。接下来,我们使用 Rect 类来定义裁剪区域,然后使用裁剪区域对图像进行裁剪。要选取一张图像的下半部分,您可以使用 OpenCV 中的裁剪(ROI)功能。在这个示例中,我们要选择原图的下半部分,因此裁剪区域的左上角坐标为 (0, height/2),表示从图像的左上角开始裁剪,水平方向不移动,垂直方向移动了。,表示裁剪区域的宽度和原图相同,高度为原图的一半,也就是选择了原图的下半部分。就定义了一个裁剪区域,它表示选择原图的下半部分。原创 2023-04-27 10:23:21 · 614 阅读 · 0 评论 -
OpenCV——常用函数
因此,这行代码的作用就是将具有不同透明度的两个图像混合到一起,即在`visImg`图像上叠加一张透明度为`opacity`的`overlay`图像。- `0`:新图像的值被计算为两幅图像相加之和,再加上这个参数,即新图像的值为`alpha*overlay + beta*visImg + gamma`,其中gamma为用户自定义的值(这里为0);- `1-opacity`:`visImg`图像在混合中的不透明度,即与`overlay`图像的透明度相反;- `visImg`:混合后得到的新图像。原创 2023-04-17 10:39:51 · 1764 阅读 · 0 评论 -
OpenCV——求直线交点
您可以使用OpenCV中的cv::Point和cv::Vec4i数据类型来表示点和直线,然后使用cv::intersect函数来计算两条直线的交点。请注意,如果两条直线不相交,或者它们重叠,则cv::intersect函数将返回false,并且intersection变量将保持原始值。在这个例子中,intersection变量存储了两条直线的交点坐标。您需要将x1、y1、x2、y2、x3和y3等替换为实际的坐标值。原创 2023-04-15 16:53:44 · 1018 阅读 · 1 评论 -
OpenCV——道路边缘检测
在这个示例中,我们首先使用霍夫变换检测直线。然后,对于每个检测到的直线,我们计算其倾斜度并检查它是否位于图像的左侧或右侧。最后,我们将选择的道路边缘线画在图像上。请注意,这只是一个基本的流程,您可能需要根据您的应用程序进行修改和优化。2. 道路边缘线应该有一定的倾斜度,以表明它们是车道线而不是其他线(例如建筑物)。1. 道路边缘线通常位于图像的左侧或右侧。3. 道路边缘线应该与其他车道线相对应。4. 道路边缘线应该与道路中心线相对应。原创 2023-04-15 16:52:22 · 608 阅读 · 0 评论 -
OpenCV——轮廓检测
在这个例子中,我们首先加载一个图像,然后将其转换为灰度图像,并应用OTSU二值化算法得到一个二值图像。然后使用findContours函数执行轮廓检测,最后使用drawContours函数将检测到的轮廓绘制在输出图像上。执行轮廓检测:使用findContours函数执行轮廓检测。预处理图像:对图像进行预处理,例如进行灰度化、二值化、滤波等操作。绘制轮廓:使用drawContours函数将轮廓绘制在原始图像上。加载图像:使用OpenCV的imread函数加载要处理的图像。原创 2023-04-15 16:45:26 · 308 阅读 · 0 评论 -
OpenCV——霍夫圆检测
接下来,我们使用 HoughCircles 函数来检测图像中的圆形物体,并将其画在原始图像上。轮廓检测是一种常见的计算机视觉算法,用于检测图像中物体的轮廓。OpenCV是一种流行的计算机视觉库,提供了许多用于轮廓检测的函数。霍夫圆检测是一种图像处理技术,用于检测图像中的圆形物体。通过设置一系列参数,如累加器的分辨率、圆形的最小和最大半径等,初始化 Hough 变换。对图像进行预处理,例如进行边缘检测等操作,以便更容易检测圆形物体。根据累加器中的投票结果,找到最可能的圆形位置和半径。原创 2023-04-15 16:44:17 · 651 阅读 · 0 评论 -
OpenCV——霍夫直线检测
将每个点表示为一条直线后,在极坐标空间中,这些直线会在一些特定的位置交汇,交点的位置表示检测到的直线的参数。最后,遍历lines中的每一条直线,通过cv::line函数将检测到的直线绘制在一个黑色图像上,并显示原始图像、边缘检测结果和霍夫直线检测结果。rho表示从原点到直线的距离,theta表示直线与水平轴的夹角),表示检测到的直线的参数。需要注意的是,cv::HoughLines函数中的第三个参数表示距离精度,第四个参数表示角度精度,第五个参数表示直线能够被检测到的最小投票数。原创 2023-04-15 16:43:05 · 1084 阅读 · 0 评论 -
OpenCV边缘检测(七)——Marr-Hildreth边缘检测
在上述代码中,我们首先读入一个灰度图像,然后对其进行高斯滤波和拉普拉斯滤波操作。接着,我们使用Marr-Hildreth算法对拉普拉斯滤波后的图像进行边缘检测。最后,我们显示原始图像和检测到的边缘图像。需要注意的是,在使用Marr-Hildreth算法进行边缘检测时,我们需要指定一些参数,如高斯滤波的标准差、阈值和卷积核大小等。这些参数的值会影响最终的边缘检测结果,需要根据具体的应用场景进行调整。原创 2023-04-13 09:15:28 · 433 阅读 · 0 评论 -
OpenCV边缘检测(六)——DOG边缘检测
在这个示例中,首先读取了一张图像,然后将图像从 BGR 色彩空间转换到灰度色彩空间。接着,使用两个不同尺度的高斯滤波器进行卷积,然后通过两个卷积结果的差异来检测边缘。最后使用 `cv::imshow()` 函数来显示原始图像和处理后的图像。是一种基于高斯滤波器的边缘检测方法。它与其他边缘检测方法的不同之处在于,它使用两个不同尺度的高斯滤波器对图像进行卷积,然后通过两个卷积结果的差异来检测边缘。原创 2023-04-13 09:14:13 · 324 阅读 · 0 评论 -
OpenCV边缘检测(五)——LOG边缘检测
在这个例子中,我们使用了Sobel算子计算梯度,使用log()函数进行对数变换,并使用threshold()函数将对数变换后的图像二值化。我们还将计算得到的x和y方向的梯度图像合并为一个梯度图像,然后对其进行对数变换和二值化。二值化图像:使用threshold()函数将对数变换后的图像二值化,得到边缘图像。对图像进行对数变换:使用log()函数将梯度图像进行对数变换,这可以增强边缘的对比度。读取图像:使用OpenCV库中的imread()函数读取图像,并将其转换为灰度图像。原创 2023-04-13 09:10:07 · 475 阅读 · 0 评论 -
OpenCV边缘检测(四)——Laplacian边缘检测
在这个示例中,我们首先读入一张图像,然后将其转换为灰度图像。接着,我们使用OpenCV的Laplacian函数对灰度图像进行边缘检测。最后,我们将检测到的边缘结果转换为8位无符号整数,并将其显示在屏幕上。Laplacian边缘检测是一种常见的图像处理技术,可以用于检测图像中的边缘。原创 2023-04-13 09:11:20 · 239 阅读 · 0 评论 -
OpenCV边缘检测(三)——Canny边缘检测
双阈值检测:将像素分为强边缘、弱边缘和非边缘三类。强边缘像素是梯度值最大的像素,弱边缘像素是梯度值次大的像素,非边缘像素是梯度值较小的像素。如果一个像素的梯度值大于高阈值,则将其标记为强边缘像素;如果一个像素的梯度值小于低阈值,则将其标记为非边缘像素;如果一个像素的梯度值介于两个阈值之间,则将其标记为弱边缘像素。如果是,则保留该像素作为可能的边缘像素。Canny边缘检测具有较高的准确率和稳定性,能够检测到细节和噪声较少的边缘。边缘连接:将强边缘像素与其周围的弱边缘像素连接起来形成完整的边缘。原创 2023-04-13 09:07:03 · 251 阅读 · 0 评论 -
OpenCV边缘检测(二)——Sobel边缘检测
在上面的代码中,首先使用imread函数读取输入图像,然后将其转换为灰度图像。接着分别计算x方向和y方向的梯度,并使用convertScaleAbs函数将计算得到的梯度转换为绝对值图像。最后,将x方向和y方向的梯度加权合并,得到最终的边缘检测结果。最后,使用imshow函数显示输入图像和Sobel边缘检测结果,使用waitKey函数等待用户按下键盘上的任意键。Sobel边缘检测是一种常用的基于图像梯度的边缘检测算法,它可以有效地检测出图像中的边缘。原创 2023-04-13 09:08:52 · 500 阅读 · 0 评论 -
OpenCV边缘检测(一)——Roberts边缘检测
然后,我们对每个像素进行遍历,计算其梯度值,并将梯度值与阈值进行比较,如果梯度值大于阈值,则将输出图像的该像素位置设置为255,否则设置为0。具体来说,Roberts边缘检测算法通过两个3x3的微分算子(Roberts算子)来计算每个像素点的边缘强度,其中一个算子用于检测45度角的边缘,另一个算子用于检测135度角的边缘。通过对这两个算子的卷积操作,可以得到每个像素点的边缘强度值,从而确定图像中的边缘。因此,在实际应用中,常常需要将Roberts边缘检测算法与其他边缘检测算法结合使用,以提高检测准确率。原创 2023-04-13 09:06:57 · 828 阅读 · 0 评论 -
OpenCV阈值分割(六)——自适应阈值
OpenCV中的自适应阈值分割(Adaptive Thresholding)可以根据局部图像的灰度值自适应地确定阈值,从而得到更好的二值化效果。原创 2023-04-12 15:06:23 · 703 阅读 · 0 评论 -
OpenCV阈值分割(五)——OSTU
该算法的基本思路是,将灰度图像进行二值化时,尝试所有可能的阈值,并计算每个阈值下前景和背景之间的类间方差,选择使得类间方差最大的阈值作为最终的二值化阈值。类间方差定义为前景像素点数占总像素点数的比例与背景像素点数占总像素点数的比例的乘积,乘以前景像素点平均灰度值和背景像素点平均灰度值之间的差的平方。OTSU阈值分割是一种经典的图像二值化方法,它能够自动确定图像的二值化阈值,使得图像在二值化后的前景与背景之间差异最大化。函数会返回确定的阈值,并将二值化后的图像保存在。在该代码中,我们使用了OpenCV的。原创 2023-04-12 15:04:01 · 595 阅读 · 0 评论 -
OpenCV阈值分割(四)——熵算法
在上述代码中,我们首先使用 `imread` 函数读取输入图像,并判断是否成功加载。然后,我们使用自定义的 `calculateEntropy` 函数计算给定阈值下的熵值。接下来,我们使用 `threshold` 函数在图像上应用不同的阈值,并计算每个阈值下的熵值。最后,我们选择具有最大熵值的阈值,并将其用于二值化图像,生成输出图像。最后,我们使用 `imshow` 函数将输入和输出图像显示出来。最后,我们使用 `waitKey` 函数等待用户按下任意按键,以便退出程序。原创 2023-04-11 11:10:20 · 263 阅读 · 0 评论 -
OpenCV阈值分割(二)——直方图
在上述代码中,我们首先使用 `imread` 函数读取输入图像,并判断是否成功加载。然后,我们使用 `calcHist` 函数计算输入图像的直方图。接着,我们计算全局阈值,该阈值是通过最小化类间方差来确定的。最后,我们使用 `threshold` 函数将输入图像进行二值化处理,生成输出图像。最后,我们使用 `imshow` 函数将输入和输出图像显示出来,并使用 `waitKey` 函数等待用户按下任意按键,以便退出程序。希望这可以帮助你使用直方图技术进行图像阈值分割!原创 2023-04-11 10:20:10 · 212 阅读 · 0 评论 -
OpenCV阈值分割(一)——直接分割
在上述代码中,我们首先使用 `imread` 函数读取输入图像,并判断是否成功加载。然后,我们使用 `threshold` 函数将输入图像进行二值化处理,生成输出图像。最后,我们使用 `imshow` 函数将输入和输出图像显示出来,并使用 `waitKey` 函数等待用户按下任意按键,以便退出程序。在 `threshold` 函数中,我们给定了两个阈值参数。第一个参数是阈值,如果输入图像的像素值大于阈值,则将其转换为白色;否则,将其转换为黑色。第二个参数是输出像素的最大值,该参数在二值化过程中使用。原创 2023-04-11 10:00:02 · 35 阅读 · 0 评论 -
OpenCV常用滤波算法——导向滤波
导向滤波的基本思想是,根据局部方向信息对图像进行加权平均,以达到保持边缘的效果。具体来说,对于每个像素,可以计算其周围像素的方向与该像素的方向的夹角,然后根据夹角大小对周围像素进行加权平均。夹角越小的像素对当前像素的贡献越大,夹角越大的像素对当前像素的贡献越小。首先,我们需要了解图像导向滤波的原理。图像导向滤波是一种基于局部方向信息的图像滤波方法,它通过对图像中每个像素的局部方向信息进行分析,来实现对图像的滤波。具体来说,图像导向滤波可以分为两个步骤:计算局部方向信息和利用局部方向信息进行滤波。原创 2023-04-10 11:41:29 · 740 阅读 · 0 评论 -
OpenCV常用滤波算法
图像高斯滤波是一种常用的图像平滑算法,它的基本思想是在空间域中对图像进行加权平均,权值由高斯函数决定。高斯滤波的优点是在平滑图像的同时保留了图像的边缘信息。在代码中,使用`GaussianBlur`函数对图像进行高斯滤波操作,其中第二个参数`result`表示输出的图像,第三个参数`Size(5, 5)`表示滤波器的大小,第四个和第五个参数为0表示标准差自动计算。最后,将原图和高斯滤波后的图像显示出来。需要注意的是,滤波器大小的选择会影响滤波效果,通常情况下,滤波器大小越大,平滑效果越明显。原创 2023-04-09 11:01:09 · 338 阅读 · 0 评论 -
RGBD图像转灰度图
【代码】RGBD图像转灰度图。原创 2023-04-08 16:42:20 · 798 阅读 · 0 评论 -
OpenCV头文件介绍
这个头文件包含了OpenCV摄像机标定模块的函数和类,可以用于对摄像机进行标定,从而得到摄像机的内部参数和外部参数。这个头文件包含了OpenCV机器学习模块的函数和类,可以进行各种机器学习任务,如分类、聚类、回归等。这个头文件包含了OpenCV特征检测和描述符模块的函数和类,可以用于提取图像中的关键点和特征描述符。这个头文件包含了OpenCV目标检测模块的函数和类,可以用于检测图像中的目标,如人脸、车辆等。这个头文件包含了所有的OpenCV模块和函数,是包含OpenCV全部功能的最基本的头文件。原创 2023-04-08 15:52:53 · 1415 阅读 · 0 评论