![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenCV
文章平均质量分 71
OpenCV
利白
这个作者很懒,什么都没留下…
展开
-
如何断点调试opencv源码
2、想要调试opencv的源码,只需要将这两个文件拷贝到我们自己项目的可执行文件的同级目录内即可。完成拷贝后,直接在vs工程中打断点F11进行单步调试,即可进入opencv源码内调试了。1、下载opencv-4.10.0-windows.exe。此时会弹出对话框,opencv官方的源码路径是。我们把步骤1的源码拷贝到这个路径即可。原创 2024-06-28 19:05:44 · 351 阅读 · 0 评论 -
OpenCV使用forEach的方式来遍历像素值
opencv 4.x新增了forEach的方式遍历像素值,比传统方式略快一些。写了一个测试用例,把它用起来。包括单通道,三通道,浮点型等Mat的遍历。原创 2024-06-27 16:07:35 · 318 阅读 · 0 评论 -
OpenCV实现BGR2BayerGB/BG格式的转换
OpenCV没有提供从BGR生成Bayer格式的接口,需要自己写。BGGR排列 -> RG格式。RGGB排列 -> BG格式。GRBG排列 -> GB格式。GBRG排列 -> GR格式。原创 2023-08-19 17:04:15 · 1652 阅读 · 0 评论 -
OpenCV(4.8.0) Error: Gpu API call (cuDNN did not return a suitable algorithm for convolution.)
【代码】OpenCV(4.8.0) Error: Gpu API call (cuDNN did not return a suitable algorithm for convolution.)原创 2023-08-12 14:54:51 · 493 阅读 · 0 评论 -
cv::Mat::step详解及clone内存对齐
创建了一个的16位4通道的矩阵,每一个元素赋值为1,2,3,4.可以看到生成了的矩阵.因为创建的是16位的,所以每一个通道是2个字节数.原文链接:https://blog.csdn.net/pj18862486309/article/details/108506122。一行是4个元素,每个元素是4个通道,所以一行的通道数,step1(0)为,step1(1)为4。因为一个元素有4个通道,每个通道2个字节,所以1个元素的字节数,step[1]为。所以一行共有个字节数,故step和step[0]都为32。原创 2023-08-02 18:12:34 · 742 阅读 · 0 评论 -
分享一个OpenCV仿照Halcon的高性能形状模板匹配作品(基于Qt/OpenCV/SIMD指令集优化)
在实际应用中矩形会在行、列方向呈现不同的缩放尺度,圆形也会变成椭圆,所以需要将行方向和列方向的缩放尺度单独求出来,这也是halcon中的find_aniso_shape_model算子,俗称各向异性模板匹配,实现起来也不难,在find_scaled_shape_model的基础上改一下,执行效果如下。参照halcon中的create_shape_model_xld算子,自己写了一个基于几何图形创建模板的函数,目前只支持圆形和矩形,圆形需要指定半径,矩形需要指定长宽。转载 2023-07-03 14:48:03 · 1925 阅读 · 0 评论 -
为什么函数参数const cv::Mat &img失效?仍旧可以修改const对象内容?
C:\Users\xxx\Downloads\untitled\main.cpp:16: error: C2664: “void calc(const CHello &,CHello &)”: 无法将参数 2 从“const CHello”转换为“CHello &”..\untitled\main.cpp(16): error C2664: “void calc(const CHello &,CHello &)”: 无法将参数 2 从“const CHello”转换为“CHello &”原创 2023-04-13 09:58:08 · 407 阅读 · 2 评论 -
一文彻底搞懂为什么OpenCV用GPU/cuda跑得比用CPU慢?
最近项目需要,发现了这个问题。网上找原因,汇总起来,有以下几点原因:1、首先对于任何一个CUDA程序,在调用它的第一个CUDA API时后都要花费秒级的时间去初始化运行环境,后续还要分配显存,传输数据,启动内核,每一样都有延迟。这样如果你一个任务CPU运算都仅要几十毫秒,相比而言必须带上这些延迟的GPU程序就会显得非常慢。2、其次,一个运算量很小的程序,你的CUDA内核不可能启动太多的线程,没有足够的线程来屏蔽算法执行时从显存加载数据到GPU SM中的时延,这就没有发挥GPU的真正功能。原创 2023-03-27 18:46:39 · 11858 阅读 · 2 评论 -
OpenCV求两个区域的交集
ret,OverlapIm=cv2.threshold(Im,200,255,cv2.THRESH_BINARY)#根据上面的填充值,因此新图像中的像素值为255就为重叠地方。两个多边形相交区域面积求解的算法网上找到的有些层次不齐,但算法都大致相同,就是计算多边形线段相交求取交点,然后找到交叠区域。这是一篇博客上的使用c程序实现多边形相交面积求解,能编译通过,也能运行,但结果计算结果不对。这个工程也做的非常好,能随机产生不同的多边形。这个ui界面可以鼠标交互,拖动多边形,动态查看交叠面积。...转载 2022-07-21 21:56:02 · 4244 阅读 · 1 评论 -
转载:亚像素数值极值检测算法总结
给定如下离散值,求其极值位置。可知125为观察极值。如果这些离散值是从某个分布ff中等间距采样获得,其真正的极值位置应位于120和125之间。下面给出形式化的定义:给定一组离散值,令xx为观测到的极值点位置,其值为f(x)f(x),其左右相邻位置的值为f(x−1)f(x−1)和f(x+1)f(x+1),真正的极值点位置为x+δx+δ,令δ^δ^为δδ的估计值。这些数值极值检测方法均是先获取观测极值xx及其邻域信息,然后综合邻域信息在各自的模型假设下通过插值估计出极值位置。...转载 2022-08-16 18:06:59 · 938 阅读 · 0 评论 -
解决OpenCV的imread/imwrite在Qt环境不支持中文路径的问题
默认写法是:QString m_strPathNameImageOrg;cv::Mat Image1 = cv::imread(m_strPathNameImageOrg.toStdString().c_str());但是这样写是不支持中文路径的。解决办法1,需要满足以下3个条件(1)源码修改为:cv::Mat Image1 = cv::imread(m_strPathNameImageOrg.toLocal8Bit().toStdString());(2)源文件添加:#pragma execution_c原创 2022-06-18 18:24:10 · 3207 阅读 · 4 评论 -
C++如何打印输出OpenCV的Mat对象的像素数据?
直接上源码:cv::Mat src = imread("d:\\findCircles1111.bmp", IMREAD_GRAYSCALE);std::cout << "==默认风格==\n" << cv::format(src, cv::Formatter::FMT_DEFAULT) << std::endl;std::cout << "==Matlab风格==\n" << cv::format(src, cv::Formatter:原创 2022-04-18 16:05:11 · 10503 阅读 · 2 评论 -
我的Qt作品(12)使用Qt+OpenCV实现一个带旋转角度的Shape形状匹配演示软件
但是Edge Based Template Matching项目本身是不支持旋转角度和金字塔分级的,所以需要自己实现这些功能。使用Qt+OpenCV自己写了一个带旋转角度的形状匹配算子以及它的演示软件。1、形状匹配的原理可以参考印度小哥的开源项目,Edge Based Template Matching。2、推荐阅读书籍《机器视觉算法与应用(第2版)》,halcon作者编写,3.11章节,模板匹配。创建模板,对照学习halcon的算子create_shape_model。二、本篇的演示软件主要功能:(原创 2022-02-28 21:35:57 · 7045 阅读 · 10 评论 -
我的Qt作品(11)使用Qt+OpenCV实现一个带旋转角度的NCC灰度模板匹配演示软件
使用Qt+OpenCV自己写了一个带旋转角度的NCC灰度模板匹配算子。算子的原理是基于NCC灰度匹配。在opencv代码中,matchTemplate函数保存在文件imgproc文件夹下的templmatch.cpp中,NCC算子的计算方式是cv::TM_CCOEFF_NORMED。https://github.com/opencv/opencv/blob/4.5.5/modules/imgproc/src/templmatch.cpp部分头文件#ifndef CNCCMATCH_H#d原创 2022-02-25 14:47:48 · 10186 阅读 · 20 评论 -
使用OpenCV绘制带旋转角度的十字光标和旋转矩形
源码如下:测试:cv::circle(imageMatch, cv::Point(col, row), 10, cv::Scalar(0, 0, 255), 1);drawCross(imageMatch, cv::Point(col, row), 10, cv::Scalar(0, 0, 255), 1, angle);---引申阅读,旋转矩形OpenCV之RotatedRect基本用法和角度探究_sandalphon4869的博客-CSDN博客_rotatedrect原创 2022-02-22 13:33:32 · 3220 阅读 · 0 评论 -
OpenCV找圆系列(2)HoughCircles算子新增了HOUGH_GRADIENT_ALT方法,效果好多了
自OpenCV 4.3.0版本,imgproc模块的HoughCircles()函数,新增加了检测算法HOUGH_GRADIENT_ALT,精度得到了很大的提升。1、举例opencvv4.5.5版本源码,https://github.com/opencv/opencv/blob/4.5.5/modules/imgproc/src/hough.cpp2、...原创 2022-02-07 13:45:08 · 5985 阅读 · 1 评论 -
OpenCV算法加速(5)官方G-API加速效果如何?怎么使用?
举例opencvv4.5.5版本源码,https://github.com/opencv/opencv/tree/4.5.5/modules/gapi写了一个demo来测试:#include <iostream>#include <opencv2/core.hpp>#include <opencv2/gapi.hpp>#include <opencv2/gapi/core.hpp>#include <opencv2/gapi/im.原创 2022-02-01 17:32:45 · 5018 阅读 · 1 评论 -
OpenCV算法加速(4)官方源码v4.5.5的默认并行和优化加速的编译选项是什么?请重点关注函数cv::getBuildInformation()的返回值
opencv v4.5.5版本源码1、并行库的使用情况\opencv\sources\modules\core\src\parallel.cpp,里面默认使用的是微软PPL加速方式,#if defined _MSC_VER && _MSC_VER >= 1600 #define HAVE_CONCURRENCY#endif其他方式如TBB,HPX,OPENMP默认是关闭的。2、指令集优化默认是开启的cmake编译选项,\open.原创 2022-01-25 00:00:58 · 7380 阅读 · 1 评论 -
使用OpenCV实现Halcon算法(9)EdgesColorSubpix的Canny方法实现
文章内容转载于:关于Halcon中EdgesColorSubpix的Canny版本C++实现_爱吃鱼的猫博客-CSDN博客最近实现了EdgesSubpix 算法发现它还有个彩色版本 于是就用OpenCV实现了它的Canny模式以下为它的C++实现void DerivateGauss(Mat &Input,Mat &Output,double Sigma);void NonMaxSuppresion();void LinkLine();void caclSubPixPosition();v转载 2022-01-13 23:39:26 · 1058 阅读 · 0 评论 -
使用OpenCV实现Halcon算法(8)emphasize图像增强
void emphasize(Mat &input,int MaskWidth,int MaskHeight,float Factor, Mat &output) {//公式res= round(input-mean)*factor))+input//等价于在MaskHeight、MaskWidth的空间内 中心化后增加方差Mat mean;//等价于求指定范围窗口内的均值blur(input, mean, Size(MaskWidth, MaskHeight));作为边缘处理,灰度值镜像在图像的边缘。原创 2022-01-13 23:36:48 · 3787 阅读 · 1 评论 -
OpenCV的findContours源码与原理
1、源码https://github.com/opencv/opencv/blob/master/modules/imgproc/src/contours.cpp\opencv\build\include\opencv2\imgproc\imgproc.hpp/** @brief Finds contours in a binary image.The function retrieves contours from the binary image using the algorithm原创 2021-11-08 21:45:30 · 5055 阅读 · 0 评论 -
AOI检测基本原理与设备构成
一,引言:AOI(automatically optical inspection)是光学自动检测,顾名思义是通过光学系统成像实现自动检测的一种手段,是众多自动图像传感检测技术中的一种检测技术,核心技术点如何获得准确且高质量的光学图像并加工处理。AOI检测技术应运而生的背景是电子元件集成度与精细化程度高,检测速度与效率更高,检测零缺陷的发展需求。AOI检测的最大优点是节省人力,降低成本,提高生产效率, 统一检测标准和排除人为因素干扰,保证了检测结果的稳定性,可重复性和准确性,及时发现产品的...转载 2021-10-14 10:55:40 · 2315 阅读 · 0 评论 -
OpenCV算法加速(3)使用OpenCL、G-API及Halide等等
OpenCV官网有介绍:https://opencv.org/opencl/开放计算语言 (OpenCL) 是一种开放标准,用于编写跨异构平台(包括 CPU、GPU、DSP 等)运行的代码。特别是 OpenCL 为应用程序提供了对 GPU 的访问,用于非图形计算 (GPGPU),在某些情况下会导致 在显着提速。 在计算机视觉中,许多算法可以在 GPU 上比在 CPU 上更有效地运行:例如 图像处理、矩阵运算、计算摄影、物体检测等。......原创 2021-09-10 09:36:21 · 5449 阅读 · 0 评论 -
OpenCV算子,pointPolygonTest检测点是否在轮廓内
opencv函数pointPolygonTest:C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)用于测试一个点是否在多边形中当measureDist设置为true时,返回实际距离值。若返回值为正,表示点在多边形内部,返回值为负,表示在多边形外部,返回值为0,表示在多边形上。当measureDist设置为false时,返回 -1、0、1三个固定值。若返回值为+1,表示点在多边形内部,返原创 2021-09-08 12:48:34 · 534 阅读 · 0 评论 -
使用OpenCV实现模板匹配(基于linemod算法)
转自|牙牙的无为生活已知物体模型,从不同方向提取RGBD特征,处理生成模板与实际图像每个位置进行匹配,匹配成功得到目标的位姿信息。 2011Linemod经典鼻祖论文:Multimodaltemplates for real-time detection of texture-less objects in heavily clutteredscenes(Linemod) 2012改进Linemod:Gradient Response Maps for Real-Time Detec转载 2021-09-04 10:58:15 · 9574 阅读 · 2 评论 -
OpenCV算法加速(2)使用SIMD指令集(MMX、SSE、AVX)和MIPP实现视觉算法优化
SIMD指令集 SSE/AVXhttps://blog.csdn.net/qq_32916805/article/details/117637192MMX和SSE实现的opencv数据结构的图像反色算法优化SSE图像算法优化系列一:一段BGR2Y的SIMD代码解析。SSE图像算法优化系列七:基于SSE实现的极速的矩形核腐蚀和膨胀(最大值和最小值)算法。......原创 2021-09-03 09:43:36 · 12174 阅读 · 6 评论 -
OpenCV图像增强算子
#include#include //头文件using namespace cv; //包含cv命名空间using namespace std;int main(){//读入图片Mat img_1 = imread("F:\\图标\\222222.jpg");//Mat img_2 = imread("F:\\图标\\2.jpg");if (img_1.empty()){cout << "打开图片失败,请检查" << endl;return -1;}.原创 2021-08-23 10:40:54 · 368 阅读 · 0 评论 -
使用OpenCV实现Halcon算法(6)dyn_threshold算子
先看halcon算子的使用:read_image (Image,'photometric_stereo/embossed_01')mean_image (Image,ImageMean,60,60)dyn_threshold (Image, ImageMean, RegionDynThresh, 15, 'not_equal')再看OpenCV的实现:void CImagePreprocessing::dynamic_threshold_referHalcon(cv::Mat &原创 2021-08-14 17:37:33 · 2310 阅读 · 0 评论 -
使用OpenCV实现Halcon算法(5)reduce_domain和crop_domain算子
Halcon的算子用法:https://blog.csdn.net/libaineu2004/article/details/107609230OpenCV实现:cv::Mat imageCrop;cv::Mat imageReduce;cv::Mat imageMask;imageCrop = imageResult(cv::Rect(0, 0, 100, 100));imageMask = Mat::zeros(imageResult.size(), CV_8UC1);//创建原创 2021-08-11 17:25:07 · 2228 阅读 · 1 评论 -
OpenCV新建一个空白的,全黑或全白的图
Mat m1 = Mat::zeros(100, 100, CV_8UC3);Mat m2 = ~m1;Mat m1 = Mat(100, 100, CV_8UC1, cv::Scalar::all(0));Mat m2 = Mat(100, 100, CV_8UC1, cv::Scalar::all(255));原创 2021-08-08 10:30:22 · 9071 阅读 · 0 评论 -
OpenCV正确读写cv::Mat二进制文件的方法(根据通道和类型)
把cv::Mat矩阵读或写入二进制文件是重要的操作。CV_8UC1,CV_16SC2,CV_32FC1等等。不同的图像类型分别代表的含义是不同的。原创 2021-08-07 11:51:19 · 4588 阅读 · 1 评论 -
OpenCV遍历文件夹读取图片,并取RGB通道的最大和最小值
cv::Mat calcMax(const cv::Mat& bgr) //求RGB三个通道的最大值{ cv::Mat image(bgr.rows, bgr.cols, CV_8UC1, cv::Scalar(255)); if (bgr.channels() != 3) { return bgr; } uchar max = 0; uchar* pSrc = nullptr; uchar* pDst = image.data; for (int y = 0; y &l.原创 2021-08-07 11:42:29 · 1594 阅读 · 0 评论 -
我的Qt作品(17)OpenCV畸变标定,针对单张圆点图片实现畸变校正
问:为什么用张正友标定法做相机标定的时候需要采集多张不同位置的图片,最少需要几张不同位置的图片呢?OpenCV 畸变校正函数undistortPoints()与remap()详解及校正效果对比。答:一张也可以,只要标定板够大,上面的标志点够多,能够覆盖相机的视野。1、详情见我在论坛发的帖子:单张圆点图片实现畸变校正。OpenCV 不同畸变校正函数的使用说明。2000万像素相机,镜头焦距16mm。视野范围400mm*300mm,原创 2021-08-03 22:30:32 · 2223 阅读 · 3 评论 -
OpenCV找圆系列(1)SimpleBlobDetector源码,凸度和圆度等检测原理
Blob是指图像中的一块连通区域,Blob分析就是对前景/背景分离后的二值图像,进行连通域提取和标记。知识点就是SimpleBlobDetector的使用,blob(斑点)筛选条件:斑点颜色、面积、圆度、惯性率、凸度。void blobDetector(){ Mat img = imread("d:\\11.jpg"); SimpleBlobDetector::Params params; params.minThreshold = 20; params.maxThreshold = 20原创 2021-08-02 17:37:22 · 4018 阅读 · 0 评论 -
OpenCV实现9点标定
OpenCV仿射变换+投射变换+单应性矩阵estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵(2行x3列),H可以是部分自由度,比如各向一致的切变。 getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6. warpAffine():对输入图像进行仿射变换 findHomography:计算多个二维点对之间的最优单映射变换矩阵H(3行x3列),使用最小均方误差或者RANSAC方法。 getP...转载 2021-07-09 22:01:53 · 7265 阅读 · 6 评论 -
收集的几篇图像同态滤波的文章
同态滤波 原理及C++实现https://blog.csdn.net/just_sort/article/details/84643234opencv 同态滤波实现 homofilterhttps://blog.csdn.net/lilingyu520/article/details/46654265https://github.com/lilingyu/homofilterOpenCV 同态滤波 高斯高通 C++https://blog.csdn.net/cyf152386原创 2021-07-04 19:21:08 · 183 阅读 · 0 评论 -
使用OpenCV实现Halcon算法(4)OpenCV实现边缘模板匹配算法
本文转自:OpenCV研习社背景概述OpenCV中自带的模板匹配算法,完全是像素基本的模板匹配,特别容易受到光照影响,光照稍微有所不同,该方法就会歇菜了!搞得很多OpenCV初学者刚学习到该方法时候很开心,一用该方法马上很伤心,悲喜交加,充分感受到了理想与现实的距离,不过没关系,这里介绍一种新的模板匹配算法,主要是基于图像边缘梯度,它对图像光照与像素迁移都有很强的抗干扰能力,据说Halcon的模板匹配就是基于此的加速版本,在工业应用场景中已经得到广泛使用。算法原理该算法主要是基于图像梯度.转载 2021-05-20 09:50:30 · 5578 阅读 · 14 评论 -
使用OpenCV实现Halcon算法(3)基于轮廓的模板匹配
〇.算法效果展示0.1要定位的模板一找到的匹配在有污损情况下找到的匹配0.2要定位的模板2找到的匹配一. 理论部分模板匹配的算法包括基于灰度的匹配,基于特征的匹配,基于组件的匹配,基于相关性的匹配以及局部变形匹配。基于灰度的匹配一般应用在没有缩放和旋转,颜色变化不大的场合。基于特征的匹配一般应用在具有缩放和旋转,颜色变化较大的场合。在模板各个组件有相对位移的情况下,使用基于组件的匹配算法。在图像模糊,目标定位不依赖于边缘的情况下一般使用基于相关性的..转载 2021-05-19 11:31:59 · 8778 阅读 · 3 评论 -
QImage/cv::Mat/HObject的图像格式互相转换,4字节对齐
即int step = int((width + 3) / 4) * 4;技术篇——分享相机buffer、HObject、QImage的转换问题。技术篇——分享相机buffer、HObject、QImage的转换问题。用户手动生成一幅4字节倍数宽度的空白图片,再把原图拷贝过来即可解决。8位图,宽度换算成4字节的整数倍,使用公式1。,否则会有宽度4字节对齐的问题。公式1:位宽大于等于8的位图。公式2:位宽小于8的位图。原创 2021-04-15 13:10:46 · 3068 阅读 · 2 评论 -
OpenCV4.4 + YOLOv4,v5
YOLOv4 资源环境配置和测试样例效果https://www.cnblogs.com/wujianming-110117/p/12791626.htmlOpenCV4.4 + YOLOv4 真的可以运行了https://cloud.tencent.com/developer/article/1668133YOLOv4 - Neural Networks for Object Detectionhttps://github.com/AlexeyAB/darknethttp..原创 2020-07-25 21:13:54 · 2556 阅读 · 0 评论