jn10010537
2024年,C#/C++
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【opencv-c++】读取视频文件或者直播码流
VS2022MicrosoftVisualStudioCommunity2022(64位)-版本17.2.6。get_video.cpp文本使用VideoCapture类捕获网络码流或者读取本地视频文件。系统Windows10专业版,版本号21H2,操作系统内部版本19044.1826;原创 2022-07-30 21:57:53 · 940 阅读 · 0 评论 -
【opencv-c++】 OSError: [WinError 126] 找不到指定的模块。
OSError: [WinError 126] 找不到指定的模块----解决办法1.背景2.解决方法1.背景在windows10, vs2019的IDE完成C++打包dll后,python脚本加载该动态链接库的时候报错:OSError: [WinError 126] 找不到指定的模块。2.解决方法(1)没有找到该DLL文件,路径不对,修改正确的路径;(2)你的DLL动态库依赖于其他其他DLL动态库无法被系统找到。在Python里面载入dll时,如果这个dll还依赖于其它的dll的话,这些相关的d原创 2020-07-23 10:57:31 · 822 阅读 · 1 评论 -
【opencv-c++】 运行tensorflow的pb分类模型
【opencv】opencv之dnn模块运行tensorflow分类模型1.背景1.1 sdk环境1.2 博客目标2.opencv配置3.源码4.报错及解决5.总结1.背景OpenCV的DNN模块是在OpenCV3.3合并到OpenCV release中的,它最早是在扩展模块中的,它可以导入caffe、tensorflow、pytorch等深度学习框架训练生成的模型文件,从而实现推理预测的功能。1.1 sdk环境本博客环境:windows10操作系统Visual Studio 2019社区版o原创 2020-08-20 18:01:25 · 862 阅读 · 12 评论 -
【opencv-c++】 实现ORB特征检测
[OpenCV] opencv接口实现ORB特征检测背景code sample背景windows10下安装的opencv是opencv-3.4.5-vc14_vc15.exe;关于windows10下vs配置opencv参考博客:[opencv读图] Windows10下VS2019加载opencv,读图https://blog.csdn.net/jn10010537/article/details/107125886code sample#include <opencv2/opencv原创 2020-07-05 12:24:51 · 1652 阅读 · 0 评论 -
【opencv-c++】获得视频宽高以及帧率
获得视频文件或者网络码流的视频帧的帧率,帧高、帧宽信息,使用opencv4.6.0 通过vs2022编译运行。原创 2022-07-31 13:55:07 · 1673 阅读 · 0 评论 -
【opencv-c++】FastLineDetector快速线段检测器
在OpenCV4.6.0 版本的opencv_contrib扩展模块中,有一个cv::ximgproc::FastLineDetector类。之所以叫Fast,是相对于opencv模块中的 cv::imgproc::LineSegmentDetector类来说,速度更快。在opencv4.6.0的版本中FastLineDetector检测是在opencv_contrib扩展模块中,FastLineDetector用于直线段检测,特点就是快速,且检测结果更准确。windows10系统。...原创 2022-08-07 14:28:50 · 1298 阅读 · 0 评论 -
【opencv-c++】将图像保存为本地的视频文件
1、实例化VideoWriter类为一个对象,例如writer对象;将图像保存为本地的视频文件,需要使用VideoWriter类。-4、writer.open打开实例化后的writer对象。-5、writer.write(src)循环写入图像。运行结束,将在本地磁盘生成live.avi视频文件。注意帧宽、帧高、是否彩色须与实际存入的图像一致。创建的opencv_start项目目录如下,-3、指定帧率,帧宽、帧高、是否是彩色。注意需要添加下图中的动态链接库。-2、指定视频的编解码器;......原创 2022-07-31 18:10:37 · 1890 阅读 · 0 评论 -
【opencv-c++】读取usb摄像头并修改摄像头曝光等属性
【opencv】读取usb摄像头并修改摄像头曝光等属性背景2.opencv配置code运行示例背景2.opencv配置比如博客安装的opencv路径如下:E:\E05_C++Develop\E05_01_opencv_3.4.5\install\-a.将dll拷贝至源文件的目录下(项目目录下)比如拷贝E:\E05_C++Develop\E05_01_opencv_3.4.5\install\opencv\build\x64\vc14\bin\opencv_world345.dllE:\E05_C原创 2020-08-23 12:29:00 · 4357 阅读 · 0 评论 -
【opencv-c++】opencv之dnn加载darknet的yolov3模型(1)
opencv之dnn加载yolov3推理1.背景1.1 opencv配置2.代码3.运行4.资源1.背景opencv之dnn(c++接口)加载yolov3推理(非openvino模型优化)即使用opencv的dnn深度学习模块加载darknet框架下的yolov3模型进行推理;注:yolov3模型使用opencv推理依赖三个文件:coco.names、yolov3.cfg、yolov3.weights;1.1 opencv配置博主opencv 3.4.5(opencv-3.4.5-vc14_vc原创 2020-09-09 18:19:12 · 1122 阅读 · 0 评论 -
【opencv-c++】 cvtColor(srcImage,grayImage, CV_BGR2GRAY) 函数报错
这里写目录标题1、报错信息2、解决1、报错信息1.1 报错截图:1.2 代码提示如下:;未定义标识符 “CV_BGR2GRAY”2、解决在版本opencv-4.4.0中:CV_BGR2GRAY改为了COLOR_BGR2GRAY。需将CV改为COLOR~原创 2020-07-22 17:11:11 · 6524 阅读 · 1 评论 -
【opencv-c++】cv::createShapeContextDistanceExtractor形状上下文距离匹配算法
这些点的统计分布直方图,成为该点的形状上下文。轮廓不同点处的形状上下文是不同的,但相似轮廓的对应点处趋于有相似的形状上下文,如下图所示。用上述方法,对n个点,每个点作为参考点,最终可以获得n个形状直方图。它采用一种基于形状轮廓的特征描述方法,其在对数极坐标系下利用直方图描述形状特征能够很好地反映轮廓上采样点的分布情况。-step1:对给定的一个图像,获得其灰度图像的轮廓点,对轮廓边缘采集到一组离散的点集(共n个点)。形状上下文特征多用于形状匹配,目标识别,因为相似的图像距离更近。...原创 2022-08-11 08:05:35 · 820 阅读 · 0 评论 -
【opencv-c++】cv::bilateralFilter双边滤波
双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。如果它们很小(< 10),过滤器就不会有太大的效果,而如果它们很大(> 150),它们就会有非常强的效果,使图像看起来“卡通化”。由于高斯滤波去降噪,会较明显地模糊边缘,对于高频细节的保护效果并不明显。原创 2022-10-16 22:56:50 · 1921 阅读 · 0 评论 -
【opencv-c++】cv::GaussianBlur高斯滤波
高斯模糊本质上是低通滤波器,根据上图高斯分布公式,和滤波器所覆盖像素距离中心的距离,就可以计算每个像素被滤波后的像素值。sigmaY:Y 方向高斯滤波器标准差(如果输入 0,则会被设置成等于 sigmaX,如果 sigmaX 和 sigmaY 都输入 0,则会根据滤波器尺寸来计算得到标准差)ksize:滤波器尺寸,可以不是正方形,但是必须为正奇数(如果设置为 0,则由输入的标准差来计算所需的尺寸)。dst:输出图像,与输入图像具有相同的尺寸,通道数,和类型。以下示例引入高斯滤波,对原图像进行高斯模糊。原创 2022-10-16 21:47:31 · 2421 阅读 · 0 评论 -
【opencv-c++】cv::filter2D图像卷积操作
如果您想将不同的内核应用于不同的通道,可以使用split将图像分割成单独的灰度图像,并分别处理它们。anchor:内核的锚点,表示经过过滤的点在内核中的相对位置;当卷积核部分位于图像外时,该函数根据指定的边界模式插像素值。一个窗口区域在另外一个大的图像上移动,对每个窗口覆盖的区域都进行点乘得到的值作为中心像素点的输出值。该函数在足够大的内核(~11 × 11或更大)情况下使用基于dft的算法,delta:可选值添加到过滤后的像素,然后将其存储在dst中。dst:输出与src相同大小和相同通道数的图像。原创 2022-10-16 19:14:25 · 1599 阅读 · 0 评论 -
【opencv-c++】cv::equalizeHist直方图均衡化
cv::equalizeHist这个函数的输入图片仅仅是一副灰度图像,输出结果是直方图均衡化之后的图像。OutputArray dst:目标图像,与原图像具有同样的大小与类型;直方图均衡化是利用图像直方图对 图像的对比对进行调整的方法。该算法对图像的亮度进行了归一化处理,提高了图像的对比度;(2) 将柱状图归一化,使柱状图bin的总和为255;该算法对亮度进行归一化处理,提高了图像的对比度。InputArray src:8位单通道的图像;直方图均衡化,用于提高图像的质量;(1) 计算原图像的直方图H;原创 2022-10-16 12:28:31 · 1035 阅读 · 0 评论 -
【opencv-c++】cv::calcHist计算直方图
直方图是数值数据分布的图形表示。构建直方图的步骤如下:第1步是将值的范围分段,即将整个值的范围一般是0-255分成一系列间隔,第2步是计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻, 通常间隔大小也是相等的。图像直方图是一个统计特征,他它具有旋转、缩放、平移不变性,直方图被应用于灰度图像的阈值分割,对比度调整,颜色匹配等等。原创 2022-10-16 10:04:14 · 924 阅读 · 0 评论 -
【opencv-c++】cv::warpAffine仿射变换实现图像旋转和平移
cv::warpAffine实现仿射变换。仿射变换是二维坐标间的线性变换,包括“平直性”以及“平行性”,常用于图像旋转(Rotations)、平移(Translations)等。图像旋转(Rotations)的步骤分为两步:-1、根据旋转角度和旋转中心获取旋转矩阵;-2、根据旋转矩阵进行仿射变换,即可实现任意角度和任意中心的旋转效果。图像平移(Translations)的步骤也分为两步:-1、定义好图像的平移矩阵,分别指定x方向和y方向上的平移量tx和ty;-2、根据平移矩阵进行仿射变换。原创 2022-10-14 07:12:45 · 1225 阅读 · 0 评论 -
【opencv-c++】cv::normalize图像像素归一化
当alpha为n,则按照alpha=1,计算出结果,然后乘以n。(norm_type类型为NORM_MINMAX除外)。把beta=0,则是规范值,beta非零则为规范范围,相当于bool(beta)是规范范围的句柄。注意:norm_type类型为NORM_MINMAX时,范围归一化使用的是如下式子,cv::normalize归一化数据。设数组中原有{A1,A2,A3…该函数分为范围归一化与数据值归一化。当AK等于max(Ai)时p=1;当AK等于min(Ai)时p=0;设范围为【0,255】原创 2022-10-13 06:40:01 · 1388 阅读 · 0 评论 -
【opencv-c++】cv::Mat::convertTo图像像素类型转换
Vec3b—表示每一个Vec3b对象中,可以存储3个char(字符型)数据,比如可以用这样的对象,去存储RGB图像中的一个像素点。double是64位,对应的cv::Mat数据结构类型是:CV_64FC1,CV_64FC3,float是32位,对应的cv::Mat数据结构类型是:CV_32FC1,CV_32FC3。同理CV_32FC3、CV_64FC3保存到cv::Vec3f、cv::Vec3d;对应的数据类型有:CV_8UC1、CV_8UC3。CV_64FC3表示64位的3通道double型。原创 2022-10-13 00:20:48 · 3205 阅读 · 0 评论 -
【opencv-c++】鼠标事件
鼠标事件即鼠标的触发事件:当鼠标执行了特定条件的动作,其对应的回调函数会被执行。注意,回调函数由开发者编写,这个名字不一定是MouseCallback。使用鼠标左键按下、鼠标左键拖动、 鼠标移动的鼠标事件。鼠标事件是一个注册函数告诉编译器我们的回调函数。userdata :传递给回调函数的参数,可选。这里把鼠标事件中包含了回调函数。flags : 鼠标事件的标志。event : 鼠标事件。x :鼠标事件的x坐标。y :鼠标事件的y坐标。原创 2022-10-12 07:12:46 · 1014 阅读 · 0 评论 -
【opencv-c++】cv::flip图像翻转
cv::flip()支持图像的翻转,包括上下翻转、左右翻转,以及上下、左右同时翻转。即围绕垂直、水平或两个轴翻转2D数组,flipCode代码0、1,-1: 0 --- 垂直方向翻转; 1----- 水平方向翻转; -1:水平、垂直方向同时翻转。原创 2022-10-09 13:01:28 · 1322 阅读 · 0 评论 -
【opencv-c++】cv::resize图像缩放
注意,不考虑初始的dst类型或大小。fy:height方向的缩放比例,如果它是0,那么它就会按照(double)dsize.height/src.rows来计算;interpolation:这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,这个参数来指定重新计算像素的方式,fx:width方向的缩放比例,如果它是0,那么它就会按照(double)dsize.width/src.cols来计算;其中,fx和fy就是下面要说的两个参数,是图像width方向和height方向的缩放比例。原创 2022-10-09 07:26:34 · 1568 阅读 · 0 评论 -
【opencv-c++】cv::ximgproc::thinning图像细化算法
C++语言二开时,需要:#include cv::ximgproc::thinning输入图像是一个单通道的灰度图像。该函数是opencv_contrib扩展模块中的内容。图像细化算法非常典型的用途在OCR文字识别领域中。原创 2022-08-07 19:26:42 · 3350 阅读 · 0 评论 -
【opencv-c++】cv::drawContours图像轮廓绘制
cv::drawContours()将查找到的轮廓绘制到图像上,它可以绘制轮廓或者填充轮廓。第五个参数thickness为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部。第三个参数contourIdx指明画第几个轮廓,如果该参数为负值,则画全部轮廓。第七个参数hierarchy为轮廓结构信息,只有当你只想绘制一些轮廓时才需要它。绘制轮廓线或填充轮廓线。原创 2022-10-09 00:15:40 · 2861 阅读 · 0 评论 -
【opencv-c++】cv::findContours图像轮廓查找
在二值图像中查找轮廓。该函数使用算法从二值图像中检索轮廓。轮廓是形状分析和目标检测与识别的有效工具。注意:由于opencv 3.2 源图像没有被这个函数修改。参数image:源,一个8位的单通道图像。非零像素被视为1。零像素保持为0,因此图像被视为二值。您可以使用compare、inRange、threshold、adaptiveThreshold、Canny和其他方法从灰度或彩色图像中创建二值图像。如果mode等于RETR_CCOMP或RETR_FLOODFILL,则输入也可以是标签的32原创 2022-10-08 23:48:11 · 1802 阅读 · 0 评论 -
【opencv-c++】cv::Canny边缘检测
使用Canny算法对输入图像进行边缘检测。参考官方文档:https://docs.opencv.org/4.x/dd/d1a/group__imgproc__feature.html#ga04723e007ed888ddf11d9ba04e2232de使用 Canny 算法查找图像中的边缘。该函数在输入图像中查找边缘,并使用 Canny 算法在输出地图边缘中标记它们。threshold1 和 threshold2 之间的最小值用于边缘链接。最大值用于查找强边缘的初始段。 ......原创 2022-08-07 22:41:27 · 751 阅读 · 0 评论 -
【opencv-c++】cv::RNG随机数生成器
关于随机数并不随机的说法:计算机产生的随机数都是伪随机数,是根据种子seed和特定算法计算出来的。RNG::uniform(a, b ) 返回一个[a,b)范围的均匀分布的随机数,如果要产生均值为λ,标准差为σ的随机数,可以λ+ RNG::gaussian( σ)RNG::gaussian( σ) 返回一个均值为0,标准差为σ的随机数。cv::RNG::uniform( ) 产生一个均匀分布的随机数。cv::RNG::gaussian( ) 产生一个高斯分布的随机数。原创 2022-10-08 21:04:45 · 1443 阅读 · 0 评论 -
【opencv-c++】cv::circle圆形绘制
cv::circle绘制一个圆。circle函数绘制一个具有给定圆心和半径的简单圆或填充圆。参数说明:img:画圆的输入输出图像。center:圆的中心坐标。radius:圆的半径。color:线条的颜色。thickness:正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充,如FILLED。linetype:线条的类型。shift :圆心坐标点和半径值的小数点位数。原创 2022-10-07 22:55:23 · 2196 阅读 · 0 评论 -
【opencv-c++】cv::rectangle矩形绘制
绘制简单的、粗的或右上填充的矩形。矩形函数cv::rectangle绘制矩形轮廓或填充矩形,其对角分别为pt1和pt2。即函数 cvRectangle 通过对角线上的两个顶点绘制矩形。参数说明:img:输入输出的图像。pt1:矩形的一个顶点。pt2:矩形对角线上的另一个顶点。color:线条颜色 (RGB) 或亮度(灰度图像 )。thickness :组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。 linetype:线条的类型。shift:坐标点原创 2022-10-07 22:32:08 · 2363 阅读 · 0 评论 -
【opencv-c++】cv::getTextSize获取文字的宽高大小
cv::getTextSize()接口先获取待绘制文本框的大小,以方便放置文本框。如果我们希望更精细的使用文字绘制函数,往往需要配合使用cv::getTextSize函数。函数cv::getTextSize计算并返回包含指定文本的框的大小。opencv中有一个特殊的绘制函数,即文字绘制函数。下面的示例代码,会展现文本以及围绕它的紧框和基线。计算文本字符串的宽度和高度。原创 2022-10-07 21:43:22 · 1500 阅读 · 0 评论 -
【opencv-c++】cv::putText文字绘制
绘制文本字符串。函数cv::putText在图像中呈现指定的文本字符串。不能使用指定字体呈现的符号将被问号替换。原创 2022-10-06 23:52:54 · 2149 阅读 · 0 评论 -
【opencv-c++】cv::fillConvexPoly填充凸多边形
函数cv::fillConvexPoly绘制一个填充的凸多边形。它不仅可以填充凸多边形,还可以填充任何没有自相交的单调多边形,也就是说,一个多边形的轮廓与每条水平线(扫描线)相交最多两次(尽管它的顶部和/或底部边缘可以是水平的)。cv::fillConvexPoly函数填充凸多边形内部。cv::fillConvexPoly()使用的算法在多边形有自交点时不能正确工作。它与上述函数的区别仅仅在于它接受的参数。cv::fillConvexPoly函数原型有两个。cv::fillConvexPoly函数原型1。原创 2022-10-06 22:32:39 · 1218 阅读 · 0 评论 -
【opencv-c++】cv::fillPoly填充多边形
函数cv::fillPoly填充由几个多边形轮廓包围的区域。该函数可以填充复杂的区域,例如,带有孔洞的区域,具有自交点的轮廓(它们的一些部分),等等。这是一个重载的成员函数,为了方便而提供。它与上述函数的区别仅仅在于它接受的参数。cv::fillPoly函数可以对多边形进行填充,支持不规则区域的填充。以下示例,使用cv::fillPoly通过重载的函数原型2。以下示例,使用cv::fillPoly的函数原型1。填充由一个或多个多边形所包围的区域。原创 2022-10-06 20:30:25 · 2393 阅读 · 0 评论 -
【opencv-c++】cv::polylines多段线绘制
cv::polylines多线段又称折线段绘制,所以可以用来绘制旋转框、多边形等。pts:折线顶点数组,一个C风格的数组的数组,包含了所有多边形中的所有点。使用cv::polylines函数原型2,绘制了2个多段线。使用cv::polylines函数原型1,绘制了1个多段线。shift:缩放比例(0是不缩放,4是1/4),默认是0。shift 缩放比例(0是不缩放,4是1/4),默认是0。lineType:线段类型,默认是cv::LINE_8。lineType:线段类型,默认是cv::LINE_8。原创 2022-10-06 16:46:30 · 2525 阅读 · 0 评论 -
【opencv-c++】cv::line直线段绘制
color - Line color.线段的颜色 比如红色 cv::Scalor(0,0,255)。pt2 - Second point of the line segment.线段的第2个点。pt1 - First point of the line segment线段的第1个点。以下示例中lineType分别使用了LINE_8 、LINE_4、LINE_AA。thickness - Line thickness.线段粗细。cv::line绘制连接两个点的线段。原创 2022-10-06 08:57:13 · 1585 阅读 · 0 评论 -
【opencv-c++】统计图像像素的均值以及标准差
如果输入图像只有一个通道,那么返回值的后 3 位都是0.可以通过 cv::Scalar[n] 查看第 n 个通道的平均值。以下示例,分别使用cv::mean、cv::meanStdDev函数接口。图像的平均值表示图像整体的亮暗程度,平均值越大,则图像整体越亮。如果计算方差又计算均值,用接口:cv::meanStdDev。函数的返回值有 4 位,分别表示输入图像的4 个通道的平均值,其中,src:待求平均值的图像矩阵(通道数可以位1~4)。如果只计算均值,用接口:cv::mean。原创 2022-10-05 23:42:16 · 2167 阅读 · 1 评论 -
【opencv-c++】统计图像像素的最大最小值
如果需要跨所有通道查找最小或最大元素,首先使用Mat:: remodeling将数组重新解释为单通道。函数cv::minMaxLoc查找元素的最小值和最大值及其位置。在整个数组中搜索极值,如果mask不是空数组,则在指定的数组区域中搜索极值。本博客介绍cv::minMaxLoc 函数,将在下一博客介绍cv::meanStdDev函数。在图像分析的时候,我们经常需要对单通道图像的像素进行统计,cv::meanStdDev 统计图像像素均值/标准差。cv::minMaxLoc 统计图像像素最小/最大值。原创 2022-10-05 22:55:26 · 1064 阅读 · 0 评论 -
【opencv-c++】cv::adaptiveThreshold自适应阈值化操作
cv::ADAPTIVE_THRESH_MEAN_C(平均)和cv::ADAPTIVE_THRESH_GAUSSIAN_C(高斯)。cv::adaptiveThreshold()支持两种自适应方法计算自适应阈值T(x, y)。本博客介绍一种改进的阈值化算法,即自适应阈值化cv::adaptiveThreshold()直接阈值化操作是一种一刀切的方式,对于亮度分布差异较大的图像,常常无法找到一个合适的阈值。如果使用高斯的方法,则(x,y)周围的像素的权值则根据其到中心点的距离通过高斯方程得到。原创 2022-10-05 16:16:23 · 1330 阅读 · 0 评论 -
【opencv-c++】cv::threshold直接阈值化操作
根据源图像像素和阈值之间的大小关系,目标像素可能被置为0、原像素值、或者设定的最大值maxValue。每一种阈值化操作类型,对应着一种源图像上每一个像素点与阈值thresh之间比较操作。以下示例使用cv::threshold获得单通道的二值图。本博客介绍cv::threshold()直接阈值化。阈值化操作在图像处理中是一种常用的算法。阈值化后得到的是单通道的二值图。原创 2022-10-05 11:40:17 · 898 阅读 · 0 评论 -
【opencv-c++】cv::inRange阈值操作选择指定值范围的像素
如果像素的BGR的3个值都在两个你输入的数组的范围内,那么输出dst单通道的这个位置的数值会被设置为255,否则设置为0。在标准HSV空间中,H通道的取值范围为0 ~ 360,S通道的取值范围为0 ~ 1( 0% ~ 100%),V通道的取值范围为 0 ~ 1( 0% ~ 100%)。如果一幅灰度图像的某个像素的灰度值在指定的高、低阈值范围之内,则在dst图像中令该像素值为255,否则令其为0,该函数输出的dst是一幅二值化之后的图像,即无论输入是单通道还是3通道,它的输出是单通道的二值图像。原创 2022-10-05 09:45:29 · 1667 阅读 · 0 评论