![](https://img-blog.csdnimg.cn/ac057d046e1b48c8b0765879b7ea2ca9.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
opencv
文章平均质量分 70
.
liu_jie_bin
技术栈: c++ pyhton Qt opencv halcon
展开
-
图像分类OpenCV dnn模块部署.onnx模型
最好的部分是支持从不同框架加载不同模型,我们可以使用这些模型执行多种深度学习功能。penCV DNN 模块仅支持图像和视频的深度学习推理。它不支持微调和训练。OpenCV DNN 模块的优点之一是它针对英特尔处理器进行了高度优化。在对实时视频进行推理以进行对象检测和图像分割应用程序时,我们可以获得良好的 FPS。有趣的是,我们能想到的大部分深度学习和计算机视觉任务都得到了支持。以下列表将使我们对这些功能有一个很好的了解。图像分类。物体检测。图像分割。文本检测和识别。姿势估计。深度估计。人和人原创 2022-03-06 00:29:22 · 6549 阅读 · 6 评论 -
C++实现大津二值化算法
文章目录一、大津算法二、原理三.算法实现步骤四.测试结果五.完整代码一、大津算法大津算法(Ostu)也称最大类间方差法。顾名思义,就使两个类别之间某个属性的方差最大的方法。在图像处理中,灰度分布均匀性作为区分图像各个区域的一种度量,背景和目标之间的灰度均值的方差越大,说明目标与背景差别越大。由于其不受图像对比度的影响,大津二值化常被用来分割目标与背景。二、原理对于一副大小RC的图像,目标和背景的分割阈值记作T,图像中像素的灰度值小于阈值T的像素个数记作N0。1.目标的像素点数占整幅图像的比例记.原创 2021-09-03 00:08:08 · 2112 阅读 · 1 评论 -
opencv 图像金字塔
文章目录概念一、opencv 函数支持概念图像金字塔:图像金字塔是图像的集合,所有图像都来自单个原始图像,这些图像被连续下采样,直到达到某个所需的停止点。有两种常见的图像金字塔:高斯金字塔:用于对图像进行下采样拉普拉斯金字塔:用于从金字塔较低的图像(分辨率较低)重建上采样图像高斯金字塔:把金字塔想象成一组图层,层越高,尺寸越小。每一层都从下到上编号,所以层(i+1)(记作Gi+1)比层i (Gi)小。为了在高斯金字塔中生成层(i+1),我们做如下操作:1.将Gi与高斯核卷积:2.原创 2022-04-07 21:50:40 · 3180 阅读 · 0 评论 -
opencv 直方图比较
前言在中详细讲解了图像直方图,图像直方图比较是度量两张图像相似度的一种手段。为了比较两个直方图(H1和H2),首先我们必须选择一个度量(d(H1,H2))来表示这两个直方图的匹配程度。OpenCV提供了4种不同的指标来计算匹配:相关性Correlation ( HISTCMP_CORREL):N是N是直方图bin的总数。Chi-Square ( HISTCMP_CHISQR)Intersection ( method=HISTCMP_INTERSECT)Bhattacharyya dis原创 2022-04-02 00:07:20 · 3071 阅读 · 0 评论 -
opencv 图像重映射cv::remap()(图像上下、左右镜像)
文章目录概念opencv 函数支持 cv::remap()1.函数原型:2.参数说明测试代码:程序运行效果:概念什么是重映射?这是从图像中的一个位置获取像素并将它们定位到新图像中的另一个位置的过程。为了完成映射过程,可能需要对非整数像素位置进行一些插值,因为源图像和目标图像之间并不总是存在一对一的像素对应关系。我们可以表达每个像素位置的重映射( x , y)作为:其中g()是映射的图像,f()是源图像,h(x,y)是作用于(x,y)的映射函数。opencv 函数支持 cv::remap()原创 2022-04-01 00:07:26 · 2605 阅读 · 0 评论 -
Gabor滤波器特征提取原理讲解及c++实现
文章目录Gabor滤波器复正弦载波高斯滤波参数解释gabor滤波核实现效果:Gabor滤波器1946年,Dennis Gabor于在“Theory of communication”一文中提出了著名的“窗口”傅里叶变换(也叫短时Fourier变换,STFT),即Gabor变换。在图像处理邻域,Gabor小波是一种非常有效的纹理表示方法。在空域,一个2维的Gabor滤波器是一个正弦平面波和高斯核函数的乘积:其中s(x, y)是一个复正弦信号,称为载波,Wr(x, y)是一个二维信号高斯型函数,称原创 2022-03-19 18:56:21 · 6890 阅读 · 1 评论 -
opencv dft离散傅立叶变换
文章目录概念一、算法步骤1.将图像扩展到最佳大小2.为复数和实值开辟空间3.进行离散傅里叶变换4.将实部和复部转换为振幅5.转换到对数尺度6.裁剪和重新排列7.归一化运行效果完整代码概念傅里叶变换将图像分解成它的正和余弦分量。换句话说,它将图像从它的空间域变换到它的频域。其思想是,任何函数都可以精确地逼近无穷个正函数和余弦函数的和。傅里叶变换是一种方法。二维图像的傅里叶变换在数学上为:这里f是空间域的图像值,F是频域的图像值。变换的结果是复数。可以通过实像和复像显示,也可以通过幅值和相位图像显示。原创 2022-03-19 00:26:15 · 4914 阅读 · 0 评论 -
OpenCV 拉普拉斯边缘检测Laplacian()原理解析
文章目录前言一、opencv 函数支持1.函数原型:2.参数说明:测试代码前言在边缘区域,像素强度显示出“跳跃”或强度的高变化。得到强度的一阶导数,我们观察到边缘的特征是最大值,如图所示:如果我们取二阶导数会发生什么?您可以观察到二阶导数为零!因此,我们也可以使用这个标准来尝试检测图像中的边缘。但是,请注意,零不仅会出现在边缘(它们实际上可以出现在其他无意义的位置);这可以通过在需要的地方应用过滤来解决。拉普拉斯算子从上面的解释,我们推断二阶导数可以用来检测边缘。由于图像是“2D”,我们需原创 2022-03-17 23:55:02 · 3654 阅读 · 0 评论 -
opencv车道线检测实战
文章目录效果复现代码效果复现代码 void lane_detection(cv::Mat &src, cv::Mat &dst) { dst = cv::Mat::zeros(src.size(),src.type()); cv::Mat grid =cv::Mat::zeros(src.size(),src.type()); int iStep = 25; int iNUmsX = src.cols / iStep; int in原创 2022-03-17 14:55:39 · 1352 阅读 · 0 评论 -
opencv复现Halcon太阳能硅片缺陷检测例程
效果OK的:NG的:代码 int i = 1; while(1) { cv::Mat src; QString dir("D:\\QtProject\\Opencv_Example\\solar_cell\\solar_cell_"); QString path; if(i>9) path = QString("%1%2%3").arg(dir).arg(i++).arg(原创 2022-03-12 14:21:51 · 2197 阅读 · 0 评论 -
opencv 不支持旋转模板匹配详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录模板匹配一、opencv 函数支持1. matchTemplate()函数2.minMaxLoc()二、代码示例:模板匹配模板匹配是一种用于查找与模板图像匹配(相似)的图像区域的技术。匹配原理:1.首先需要两张图像,一张源图像(I):我们期望在其中找到与模板图像匹配的图像,一张模板图像 (T):将与源图像进行比较的模板图像2.然后,我们的目标是检测出最匹配的区域:,将模板图像在源图像上进行滑动计算比较。从左到右,从.原创 2022-03-16 00:12:04 · 2620 阅读 · 2 评论 -
opencv 仿射变换
文章目录一、仿射变换二、求解仿射变换三、opencv 函数支持1.getAffineTransform()函数2.getRotationMatrix2D()函数3.warpAffine()函数四、测试代码一、仿射变换仿射变换可以理解为矩阵乘法(线性变换)和向量加法(平移)的变换。本质上,一个仿射变换代表了两个图像之间的关系,可以分别表示为:1.旋转(线性变换)2.翻译(向量加法)3.缩放操作(线性变换)仿射变换通常使用2×3矩阵表示:将M乘于一个二维向量[x, y],例如图像像素坐标,最终可原创 2022-03-16 21:37:54 · 6722 阅读 · 0 评论 -
opencv harris角点检测详解
文章目录概念一、角点检测原理二、opencv 函数支持 cornerHarris()概念特征提取特征提取是计算机视觉和图像处理中的一个概念。特征指的是唯一可识别的特性。特征提取是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。图像特征的类型图像特征作为标志性的属性,常见的有:边缘角点(也称为兴趣点)Blobs(也称为感兴趣的区域)本章研究一下角点一、角点检测原理角点既然是两条边原创 2022-03-16 19:22:00 · 1365 阅读 · 0 评论 -
opencv 改变图像的对比度、亮度和伽玛校正
文章目录概念代码实现1.遍历像素的方式2.opencv convertTo()函数3.伽玛校正4.效果演示完整代码:概念下面的解释来自Richard Szeliski的《计算机视觉:算法和应用》一书图像处理:一般的图像处理算子是一个函数,它接受一个或多个输入图像并生成一个输出图像。图像变换可以看成:1.点运算(像素变换)2.领域(基于区域)运算像素变换:1.在这种图像处理变换中,每个输出像素的值仅依赖于相应的输入像素值(可能还要加上一些全局收集的信息或参数)。2.这些操作符的例子包括亮原创 2022-03-15 00:17:42 · 3977 阅读 · 1 评论 -
opencv 直方图均衡化
文章目录前言一、原理opencv 函数支持equalizeHist()前言在中详细讲解了图像直方图,这章来讲解一下直方图的均衡化。直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。先看下图未经过均衡化的图像,可以看到像素似乎聚集灰度值范围的中间。直方图均衡化所做的就是扩大这个范围。在应用均衡化后一、原理均衡化意味着将一个分布(给定的直方图)映射到另一个分布(灰度值更宽、更均匀的分布),因此灰度值分布在整个范围内。为了达到均衡效果,重映射应该是累积分布。对于直方图H(i原创 2022-03-16 11:20:43 · 6176 阅读 · 0 评论 -
opencv 图像直方图详解
//直方图void test_Hist(){using namespace cv;cv::Mat image = cv::imread(“D:\QtProject\Opencv_Example\drawRect\drawRect.jpg”, cv::IMREAD_GRAYSCALE);if (image.empty()) {cout << “Cannot load image” << endl;return;}imshow(“image”,image);const原创 2022-03-15 22:37:01 · 8894 阅读 · 0 评论 -
opencv SimpleBlobDetector blob分析斑点检测原理详解
文章目录概念一、SimpleBlobDetector算法原理二、代码示例:运行效果:概念Blob是图像中具有某些共同属性(如灰度值、圆度等如下图所示属性)的一组连通像素。一、SimpleBlobDetector算法原理SimpleBlobDetector从图像中提取blobs的算法流程如下:根据阈值步距“thresholdStep”递增,从最小阈值‘minThreshold“(包含)到最大阈值maxThreshold(排除)计算几个阈值,第一个阈值minThreshold,第二个是minTh.原创 2022-03-04 22:59:18 · 7739 阅读 · 1 评论 -
opencv 混合两个图像addWeighted()函数原理解析
文章目录概念opencv函数支持cv::addWeighted()函数原型代码示例效果:概念图像混合为线性混合运算,理论公式如下:f0(x):表示图像1的像素值f1(x):表示图像2的像素值α0:表示两个图像的权重参数。值区间0-1;opencv函数支持cv::addWeighted()函数原型CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,原创 2022-03-15 00:15:34 · 1047 阅读 · 0 评论 -
opencv 自适应二值化cv::adaptiveThreshold()函数详解(复杂背景下提取划痕)
文章目录前言一、opencv cv::adaptiveThreshold()函数1.函数原型:2.参数说明:3.函数原理:代码示例前言从以下复杂背景图片下提取划痕假设采用全局阈值二值化, cv::threshold(src, globalBinayImage, 150, 255, cv::THRESH_BINARY_INV),很难得到最优的二值化效果,划痕没有完整提取出来,反而把背景也提取出来了:这个时候就需要一种能够自适应的二值化算法上场了。一、opencv cv::adaptiveThre原创 2022-03-06 14:10:48 · 7085 阅读 · 2 评论 -
opencv canny边缘检测算法详解
在1986年,Canny边缘检测算子首次在论文《A Computational Approach to Edge Detection》中提出,目前,Canny边缘检测算子已广泛应用于各种图像处理视觉系统。由于它是从不同视觉对象中提取有用的结构信息,所以了要处理的数据量大大减少。JOHN CANNY总结出,不同视觉系统对边缘检测具有较为类似的要求,所以,发现可以采用一种应用意义广泛的边缘检测技术。JOHN CANNY采用了如下步骤设计实现了canny算子。(1)消除噪声。边缘检测的算法的主要思想采用了图像原创 2022-03-14 22:17:42 · 8883 阅读 · 0 评论 -
图像平滑之中值滤波(c++实现opencv medianBlur()函数)
文章目录一、概念二、opencv medianBlur()函数三、c++实现中值滤波四、自己实现中值滤波和opencv中值滤波对比一、概念中值滤波中值滤波的实现原理是把数字图像中一点的值用该点的一个区域的各个点的值的中值代替。我们将一个点的特定长度或形状的邻域称为窗口,那么对于二维图像的中值滤波,一般采用33或55的窗口进行滤波,中值滤波和均值滤波有所区别,是一种非线性滤波。二、opencv medianBlur()函数函数原型:CV_EXPORTS_W void medianBlur( Inp原创 2022-02-19 22:20:27 · 3292 阅读 · 1 评论 -
图像平滑之均值滤波(c++实现opencv blur()函数)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、概念二、opencv blur函数三、原理c++实现四、自己实现的均值滤波和opencv的均值滤波对比一、概念均值滤波是最简单的滤波器,他将K*K窗口中像素值的平均值作为输出。这种滤波器等价于图像与全部元素值为1的核函数先进性卷积。二、opencv blur函数函数原型:CV_EXPORTS_W void blur( InputArray src, OutputArray dst,原创 2022-02-19 19:06:43 · 3352 阅读 · 0 评论 -
opencv findContours()轮廓特征分析大全(求面积、周长、几何矩、质心、凸包、最小外接矩形、最小外接三角形、最小外接椭圆等)
void test_convexHull(){cv::Mat src;src = cv::imread(“D:\QtProject\Opencv_Example\convexHull\convexHull.png”, cv::IMREAD_GRAYSCALE);if (src.empty()) {cout << “Cannot load image” << endl;return;}cv::imshow(“src”, src); cv::Mat binary;原创 2022-03-05 12:25:18 · 4778 阅读 · 0 评论 -
opencv 求凸包convexHull()函数解析
文章目录一、概念二、opencv convexHull()函数1.函数原型2.参数说明三、代码示例总结一、概念引自百度:凸包(Convex Hull)是一个计算几何(图形学)中的概念。在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造.在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。二、ope原创 2022-03-03 20:53:34 · 2034 阅读 · 1 评论 -
opencv 矩形cv::Rect数据结构详解
文章目录前言一、源码二、cv::Rect的成员和属性1.成员2.属性三、代码示例四、运行效果前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、源码template<typename _Tp> class Rect_{public: typedef _Tp value_type; //! default constructor Rect_()原创 2022-03-05 22:30:34 · 12164 阅读 · 0 评论 -
OpenCV Tutorials(三)矩阵的掩码(或卷积)操作
文章目录前言一、像素访问方法二、filter2D 函数前言矩阵的掩码或者卷积操作非常简单。其思想是,我们根据掩码矩阵(也称为核)重新计算图像中每个像素的值。此掩码保存的值将调整相邻像素(和当前像素)对新像素值的影响程度。从数学的观点来看,我们用指定的值进行加权平均。例如我们对图像做对比度增强方法。每个像素应用下面的公式:也可以使用卷积核表示:通过将掩码矩阵的中心放在要计算的像素上并将像素值与重叠矩阵值相乘来使用掩码。和公式表示方法是相同的操作效果,但是在大型矩阵的情况下,后一种表示法更容易查看。原创 2022-03-13 14:15:36 · 2723 阅读 · 0 评论 -
OpenCV Tutorials(二) cv::Mat图像遍历和算法性能测量
文章目录如何衡量算法的性能?如何遍历每一个图像的像素?1.高效的遍历方式2. 迭代器(安全)方法3.动态地址计算 cv::Mat::at() 函数4.查找表5.四种方式性能对比总结如何衡量算法的性能?我们如何测量时间?OpenCV提供了两个简单的函数来实现cv::getTickCount()和cv::getTickFrequency()。第一个返回某个事件(比如自启动系统以来)中系统CPU的节拍数。第二个返回您的CPU在一秒内发出一个tick的次数。因此,测量两个操作之间的时间代码如下:double翻译 2022-03-12 23:10:06 · 1872 阅读 · 0 评论 -
OpenCV Tutorials(一) cv::Mat类概念和常用成员函数
一 、构造Mat1.构造一个单通道灰度值全零Mat cv::Mat zereImage = cv::Mat::zeros(cv::Size(100,100),CV_8UC1);2.构造一个单通道指定灰度值的Mat cv::Mat spePixelImage = cv::Mat(cv::Size(100,100), CV_8UC1,cv::Scalar(128));3.构造一个三通道灰度值全零Mat cv::Mat zereImages = cv::Mat::zeros原创 2022-03-12 12:37:16 · 2349 阅读 · 0 评论 -
C++ 高效的遍历opencv Mat像素
文章目录前言一、直接获取Mat对象的data数据的指针代码如下:耗时如下:二、再看看行优先和列优先遍历的耗时行优先代码如下:耗时如下:列优先代码如下:耗时如下:三、总结前言在文章https://blog.csdn.net/weixin_44901043/article/details/120047996?spm=1001.2014.3001.5502 中,从内存存储上,分析了行优先遍历和列优先遍历方式效率差别,得出行优先遍历的方式比列优先效率快的结论。在该文中,采用的是Mat对象提供的at()函数通过原创 2022-02-26 22:59:52 · 4973 阅读 · 0 评论