opencv
卧_听风雨
这个作者很懒,什么都没留下…
展开
-
opencv 如何判断一个点在某个轮廓里面
opencv 如何判断某一个点在某个轮廓里面1.新建一个相同大小的全0 Mat dst2.在该Mat 上绘出该轮廓,用drawContours,并填充为255;3.判断dst 上该点像素值是否是 255Mat dst = Mat::zeros(src.size(),CV_8U);drawContours(dst,contours,index,Scalar(255),-1);Point pt(x,y);if(dat.at<uchar>(y,x) == 255){ // 在该轮原创 2021-04-21 15:04:24 · 1917 阅读 · 0 评论 -
opencv的CopyTo的用法
用法1:深拷贝A.CopyTo(B); // B 与 A 矩阵一模一样,改变任何一个,互不影响用法2:掩膜操作A.CopyTo(B,M);// 把与M中非0像素,相同位置的A中像素copy到B中同一位置// M 必须是CV_8U, 可以是单通道或多通道可以和浅拷贝相结合,实现非常骚的操作:ROI = B(Rect(0,0,B.Cols,B.Rows));// 浅拷贝Mask = Mat(ROI.rows,ROI.cols,ROI.depth(),Scalar(1));A.CopyTo(原创 2021-04-01 15:18:26 · 4603 阅读 · 0 评论 -
Opencv的深拷贝和浅拷贝记录
浅拷贝B = A;// 为浅拷贝,两者公用一块存储内存,改变任何一个,另一个都会改变Mat src,dst;src = imread("tt.jpg");dst = src;深拷贝存储内存相互独立,操作任何一个,互不影响函数:copyTo(), clone();A.CopyTo(B);B = A.Clone();...原创 2021-04-01 15:01:36 · 135 阅读 · 0 评论 -
opencv阈值分割threshold函数用法详解
函数名 thresholdC++ 版double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );参数说明:函数返回值:做阈值分割的像素阈值;src: 输入图像矩阵,单通道的8位或32位图像矩阵,可以是float类型;dst:输出图像矩阵,与src类型一致,size大小一致;thresh:分割所需的图像阈值;maxval: 当type 选择ThresholdTypes::原创 2021-04-01 14:05:21 · 5948 阅读 · 3 评论 -
opencv如何把16位图像转换为8位图像
一、opencv自带的方法:Mat src16,tmp;Mat dst8 = Mat::zeros(src16.size(), CV_8U);normalize(src16, tmp, 0, 255, NORM_MINMAX);convertScaleAbs(tmp, dst8);二、自己代码实现 Mat src16; Mat dst8 = Mat::zeros(src16.size(), CV_8U); double mymin, mymax; cv::minMaxIdx(s原创 2021-03-25 17:21:58 · 8885 阅读 · 0 评论 -
opencv——Mat.type()解析并记录
opencv中Mat的类型其中mat有一个type()的函数可以返回该Mat的类型。类型表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为:CV_(位数)+(数据类型)+(通道数)。具体的有以下值:...原创 2020-01-06 10:27:06 · 877 阅读 · 0 评论 -
error C2872: “ACCESS_MASK”: 不明确的符号
原因:opencv的命名空间using namespace cv和windows.h中ACCESS_MASK定义冲突。解决方案:1、注释掉所有的using namespace cv,然后在需要的地方写上cv::(已试过,没有效果)。2、找到添加了#include <windows.h>的头文件:xxx.h,或者,包含有 windows.h的库文件,比如我的xxx.h中存在:...原创 2019-11-15 10:54:52 · 422 阅读 · 0 评论 -
VS2013无法打开并识别xxx.props属性表(以opencv为例),提示import声明路径问题解决办法
VS2013无法打开并识别xxx.props属性表一、修改xxx.props内include内包含路径二、修改xxx.vcxproj内xxx.props路径一、修改xxx.props内include内包含路径 记事本打开 xxx.props文件,找到opencv包含路径,更改为自己opencv安装路径二、修改xxx.vcxproj内xxx.props路径以记事本打开xxx.vcxpro...原创 2019-10-14 10:41:48 · 483 阅读 · 0 评论 -
C++与opencv实现OTSU自适应阈值分割算法
OTSU算法原理Otsu算法(大津法或最大类间方差法)使用的是聚类的思想。它把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小。通过方差的计算来寻找一个合适的灰度级别来划分。 所以可以在二值化的时候采用otsu算法来自动选取阈值进行二值化。otsu算法被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响。因此,使类间方差最大...原创 2019-08-05 11:30:55 · 3926 阅读 · 1 评论 -
opencv图像基本加减乘除与或非对数绝对值
图像基本运算 图像的基本运算有很多种,比如两幅图像可以相加、相减、相乘、相除、位运算、平方根、对数、绝对值等; 图像也可以放大、缩小、旋转,还可以截取其中的一部分作为ROI(感兴趣区域)进行操作, 各个颜色通道还可以分别提取及对各个颜色通道进行各种运算操作。 总之,对于图像可以进行的基本运算非常的多,只是挑了些常用的操作详解。void add(InputArray src1, Inpu...原创 2019-04-02 11:11:47 · 1394 阅读 · 0 评论 -
c++如何读取*.csv表格内的数据到Mat中
c++ 保存 .csv格式的文件很简单,那么怎么读取.csv表格数据呢,FILE *pFile;pFile = fopen("distanceData.csv", "r");char readLine[1024];int lineNo = 0;Mat dataMat = Mat::zeros(ROWS,COLS,CV_32FC1);while (1){ memset(readLi...原创 2019-03-27 16:12:36 · 1035 阅读 · 0 评论 -
opencv中Mat矩阵的合并与拼接
opencv如何将两个矩阵按行或者按列合并在Matlab中将两个矩阵合并非常方便:按行合并,如A=[B C];按列合并如A=[B ;C]其实opencv有自带函数:vconcat和hconcat函数,用于矩阵的合并与图像的拼接。 vconcat(B,C,A); // 等同于A=[B ;C] hconcat(B,C,A); // 等同于A=[B C]其实不用这两个函数,在C++中也...原创 2019-03-27 15:59:33 · 14489 阅读 · 0 评论 -
opencv判断一个点是否在轮廓内pointPolygonTest的用法
OpenCV函数pointPolygonTest():C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)用于判断一个点是否在轮廓中 :当measureDist设置为true时,若返回值为正,表示点在轮廓内部,返回值为负,表示在轮廓外部,返回值为0,表示在轮廓上。当measureDist...原创 2019-01-08 15:48:54 · 10919 阅读 · 1 评论 -
vs2013链接器->输入->附加依赖项->继承的值如何更改
卸载opencv后,发现VS2013每次编译时,还是会加载opencv的lib库文件。原因是,“附加依赖项”仍然会包含opencv的项目。来自“继承的值”,却不知道如何删除。经多方摸索,该问题终于解决了。解决方法:始图->其他窗口->属性管理器:注意:是“属性管理器”,而不是“属性窗口”或“属性页”。Debug| X64:(或Debug| Win32)双击:“Micros...原创 2018-11-21 18:35:11 · 6452 阅读 · 0 评论 -
Opencv Mat矩阵中Mat.data、size、depth、elemSize、step等含义
.data: uchar类型的指针,指向Mat数据矩阵的首地址。可以理解为标示一个房屋的门牌号;.dims: Mat矩阵的维度,若Mat是一个二维矩阵,则dims=2,三维则dims=3,大多数情况下处理的都是二维矩阵,是一个平面上的矩阵。 可以理解为房屋是一个一层的平房,三维或更多维的则是多层楼房;.rows: Mat矩阵的行数。可理解为房屋内房间行数;...原创 2018-11-21 17:19:57 · 2582 阅读 · 0 评论