opencv视觉知识学习
从刻意到习惯
这个作者很懒,什么都没留下…
展开
-
opencv代码
#include<opencv2/opencv.hpp>#include using namespace std;using namespace cv;Mat src,dst;void CallBack_Demo(int, void*);char out[] = “outPut”;int element_size = 3;int max_size = 21;int main(){//显示图像src = imread("C:\\Users\\siasun\\Desktop\原创 2021-07-13 21:36:24 · 495 阅读 · 0 评论 -
opencv代码
#include<opencv2/opencv.hpp>#include using namespace std;using namespace cv;int main(){//显示图像Mat src;src = imread(“C:\Users\siasun\Desktop\10.jpg”);if (src.empty()){cout << “counld not load image…” << endl;return -1;}namedWi原创 2021-07-13 21:35:13 · 190 阅读 · 0 评论 -
opencv近期学习测试代码
#include<opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;Mat src,dst;void CallBack_Demo(int, void*);char out[] = "outPut";int element_size = 3;int max_size = 21;int main(){ //显示图像 src = imread("C:\\Use原创 2021-03-15 15:45:00 · 366 阅读 · 0 评论 -
opencv图像增强
//掩模,图像增强的两种方法 cols = src.cols * src.channels(); rows = src.rows; int offset = src.channels(); Mat dst1 = Mat::zeros(src.size(), src.type()); /*for (int row = 1; row < rows; row++) { const uchar* current = src.ptr<uchar>(row); const ucha原创 2021-03-15 15:44:00 · 757 阅读 · 0 评论 -
图像金字塔、边缘检测、图像加权显示、直方图均衡化
//图像金字塔 //上采样 pyrUp(src, dst, Size(src.cols * 2, src.rows * 2)); pyrDown(src, dst, Size(src.cols / 2, src.rows / 2)); //高斯不同 Mat g1, g2, gr, dogImg; cvtColor(src, gr, CV_BGR2GRAY); GaussianBlur(gr, g1, Size(5, 5), 0, 0); GaussianBlur(g1, g2, Size(原创 2021-03-15 15:41:09 · 172 阅读 · 0 评论 -
膨胀腐蚀以及其它形态学处理
//膨胀 结构元素覆盖下图像的最大像素值 //腐蚀 结构元素覆盖下图像的最小像素值 //char out[] = "outPut"; namedWindow("out", CV_WINDOW_AUTOSIZE); createTrackbar("element_size:", "out", &element_size, max_size, CallBack_Demo); CallBack_Demo(0, 0); //回调函数 void CallBack_Demo(int, void*原创 2021-03-15 15:31:12 · 146 阅读 · 0 评论 -
单、多通道图像反差处理
单通道图像反差处理//读取图像像素,获取反差图 Mat gray; cvtColor(src, gray, CV_BGR2GRAY); int height, width; height = gray.rows; width = gray.cols; for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { int gray_value = gray.at<原创 2021-03-15 15:22:52 · 178 阅读 · 0 评论 -
resize函数详解
resize函数的形式void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR) 参数说明:src - 原图dst - 目标图像。当参数dsize不为0时,dst的大小为size;否则,它的大小需要根据src的大小,参...原创 2019-04-18 22:26:40 · 38134 阅读 · 0 评论 -
opencv滑动条的使用
createTrackbar(const string& trackbarname, const string& winname, int* value, int count,TrackbarCallback onChange = 0,void* userdata = 0);形式参数一、trackbarname:滑动空间...原创 2019-05-22 16:45:46 · 189 阅读 · 0 评论 -
掩模mask详解
Rect r1(100, 100, 250, 300); mask = Mat::zeros(image.size(), CV_8UC1);//定义一个和原图大小相同的黑色图片 mask(r1).setTo(255);//将r1感兴趣区域设置为白色 img1 = image(r1);//原图的r1部分复制到img1里 image.copyTo(img2, m...原创 2019-05-30 14:15:29 · 5095 阅读 · 0 评论 -
用掩模提高图像对比度
tempel_copy = tempel_img.zeros(tempel_img.size(), tempel_img.type()); int offset = tempel_img.channels();//图像通道数 int rows = tempel_img.rows, cols = tempel_img.cols*offset;//列一定要乘以通道数 for (int ...原创 2019-05-30 18:59:50 · 319 阅读 · 0 评论 -
矩,hu矩以及matchshape函数
在OpenCV中,可以很方便的计算多边形区域的3阶特征矩,opencv中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩。class Moments { public: ...... // 空间矩 double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; // 中心矩 dou...原创 2019-05-28 10:45:47 · 889 阅读 · 0 评论 -
Threshold函数详解
转载:https://blog.csdn.net/gongzhitank/article/details/65462541threshold 方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。其函数原型如下:double threshold(InputArray src, OutputArray dst, double thresh, double maxval, in...转载 2019-05-28 11:11:49 · 8706 阅读 · 0 评论 -
调整图像亮度与对比度方法
#include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char **argv) { Mat src = imread("D:/meinv.jpg"); if (!src.d...转载 2019-05-29 15:56:12 · 629 阅读 · 0 评论 -
canny函数与sobel函数详解
canny函数(1)若某一像素位置的幅值超过高阈值,该像素被保留为边缘像素。 (2)若某一像素位置的幅值小于低阈值,该像素被排除。 (3)若某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。 void Canny(inputArray,outputArray,double threshold1,double threshold2,int apertureS...原创 2019-05-29 16:50:10 · 1692 阅读 · 0 评论 -
addWeighted()图片融合函数
addWeighted()函数是将两张相同大小,相同类型的图片融合的函数void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );参数1:src1,第一个原数组.参数2:alpha,第一个数组元素权重参数3:src2第二个原数组...转载 2019-05-29 16:52:43 · 1124 阅读 · 0 评论 -
镜头、相机、光源的选型
普通镜头需要掌握的基本概念:(1)焦距 :镜头主点到焦点距离(2)光圈:控制通光量的大小(3)光圈数:F=f/D,是焦距与CCD对角线长度的比值,比如镜头上的1:1.4就是说镜头最大光圈是f/1.4.(4)景深:物体成清晰像的情况下在物体空间的移动范围1.光圈越小,景深越大2.焦距越小,景深越大3.拍摄距离越大,景深越大(5)镜头的MTF曲线:此曲线用于评价镜头成像好坏的,曲线越平滑...原创 2019-06-25 09:53:59 · 4774 阅读 · 0 评论 -
findcounters函数查找的轮廓点集有序排列
std::sort(contours.begin(),contours.end(),ContoursSortFun); sort是分类函数,参数解释: 第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。第二个参数相对较好理解,即首地址加上数组的长度n(代表尾地址的下一地址)。最后一个参数是比较函数的名称(自定义函数cmp),这个比较函数可以不写,即第三个参数可以缺省,...原创 2019-04-18 22:02:27 · 1924 阅读 · 0 评论 -
mfc中鼠标响应事件截取roi区域
首先对需要的控件创建鼠标响应函数,在项目—类导向——消息中,找到onlbuttondown,onmove和onlbuttonup,添加至可用后双击就可以出现编辑函数。在函数中进行编辑在头文件中添加:CImage t_img; BOOL move_flag; BOOL down_flag; BOOL up_flag; int show_width;int show_heig...原创 2019-04-23 17:05:49 · 1325 阅读 · 0 评论 -
膨胀、腐蚀、开操作、闭操作、形态学梯度、顶帽、黑帽详解
1.膨胀与腐蚀膨胀与腐蚀都是对图片的白色部分而言。膨胀是图片中的高亮部分进行扩张,腐蚀是高亮部分缩小。函数形式:第一个参数:InputArray src,//输入第二个参数:OutputArray dst,//输出第三个参数:InputArray kernel,//(核大小一般配合getStructuringElement()使用;先定义一个Mat类型的变量来接受getStructu...原创 2019-04-20 20:05:09 · 825 阅读 · 0 评论 -
circle函数的用法
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)img为源图像指针center为画圆的圆心坐标radius为圆的半径color为设定圆的颜色,规则根据B(蓝)G(绿)R(红)thickness 如果是正数,表示组成圆的...转载 2019-01-02 10:40:25 · 15704 阅读 · 0 评论 -
霍夫变换阀值选取问题
在用霍夫变换进行图像检测的时候,阀值选取过大或过小都会影响图片检测效果,可以通过相应的约束条件来作相应处理,以下代码的思路或许在日后会有所帮助,互相学习!!! HoughLines(midImage, lines, 1, CV_PI / 180, 300, 0, 0);//第5个参数就是阈值,阈值越大,检测精度越高 //cout &lt;&lt; lines.size() &lt;&lt...转载 2018-12-23 11:19:56 · 1789 阅读 · 0 评论 -
rectangle函数与Rect函数的用法
rectangle函数是用来绘制一个矩形框的,通常用在图片的标记上。rectangle(img2, Point(j,i), Point(j + img4.cols, i + img4.rows), Scalar(255, 255, 0), 2, 8);img2:要做处理的图片二三代表左上右下矩形的角坐标scalar:颜色2代表线条宽度8是线型,默认取8...原创 2018-12-22 21:40:40 · 36905 阅读 · 1 评论 -
用仿射变换实现图片的角度任意旋转
Mat src,rotate_dst;char* source_window = "Source image";char* rotate_window = "Rotate"; int main( int argc, char** argv ) { Point2f srcTri[3]; Point2f dstTri[3]; //定义一个2行3列的矩阵Mat rot_mat...原创 2018-12-19 22:02:34 · 1628 阅读 · 0 评论 -
霍夫变换检测直线原理及实例
霍夫变换原理霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。直线可以由直角坐标或极坐标表示,直线可以由直角坐标或极坐标表示,直角坐标表示直线时,垂直于x轴的直线斜率不能表示,所以选择极坐标对于霍夫变换, 我们将采用第二种方式极坐标系来表示直线. 因此, 直线的表达式可...转载 2018-12-17 09:43:12 · 3017 阅读 · 0 评论 -
边缘检测内容学习!!!
第一次在csdn上发表文章,今天掌握了图片的边缘检测内容,想分享出来。一是加深印象,二是想给需要的朋友一些方便,因为学了这么多天我也是借助csdn了解了很多,所以一起学习!分享!进步!几个边缘检测的主要代码:canny边缘检测:Mat cvimg = imread(cvfile); Mat edgeImg; Canny(cvimg,edgeImg,50,50);sobel边缘检测:...原创 2018-10-30 09:37:30 · 284 阅读 · 0 评论 -
轮廓查找、绘制以及轮廓长度计算
有时需要对已有的图像进行处理,使其更清晰或更规则,轮廓检测可以达到这个目的。先介绍几个相关函数:1.findContours函数findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, ...原创 2019-02-24 11:23:01 · 4185 阅读 · 0 评论 -
阈值分割方法总结
阈值是界限的意思,阈值分割就是以一个合适的像素值作为界限将图像处理成高对比度、容易识别的图像的一种方法。threshold()double cv::threshold( cv::InputArray src, // 输入图像 cv::OutputArray dst, // 输出图像 double thresh, // 阈值 double maxValue, //...原创 2019-02-25 16:50:40 · 12500 阅读 · 0 评论 -
模板匹配总结
模板匹配,就是在一幅图像中寻找另一幅模板图像最匹配(也就是最相似)的部分的技术。matchTemplate(image,templ,result,method)image表示目标图像templ表示模板图像result表示二者匹配的对比区域图像method表示匹配方法归一化的目的简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了...转载 2019-02-26 11:08:48 · 1122 阅读 · 0 评论 -
将图片的像素翻转
转载:https://blog.csdn.net/qq_35661436/article/details/79176462//written by Mr.zs//编程环境:VS2017 x64/*功能:将图片的像素翻转zhuy*/#include <opencv2\opencv.hpp>#include <iostream>using namespace...转载 2019-03-14 20:00:31 · 987 阅读 · 0 评论 -
仿射变换函数详解
仿射变换的功能是从二维坐标到二维坐标之间的线性变换,且保持二维图形的“平直性”和“平行性”。仿射变换可以通过一系列的原子变换的复合来实现,包括平移,缩放,翻转,旋转和剪切。图像旋转和平移是图像处理中常用的一种操作,opencv2和opencv3中对图像的旋转和平移都是通过仿射变换函数cv::warpAffine()来实现的。void warpAffine(InputArray src, Out...原创 2019-03-07 21:44:39 · 1601 阅读 · 0 评论 -
透视变换详解
有一种与仿射变换经常混淆的变换为透视变换,透视变换需要四组点对才能确定变换矩阵,由于仿射变换保持“平直性”与“平行性”,因此只需要三组点对,而透视变换没有这种约束,故需要四组点对warpPerspective函数主要作用:对图像进行透视变换,就是变形void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size ...原创 2019-03-07 21:54:13 · 2222 阅读 · 0 评论 -
颜色空间缩减
在对单通道图像进行处理时,像素的可能值为256个,但处理多通道时,像素的处理就会相当麻烦,其实用这些颜色中具有代表性的一小部分就可以达到同样的效果,所以颜色空间缩减就可以派上用场了。思路是这样的,我们可以把0-9范围的像素值取为0;10~19范围的取为1;也就是通过舍掉余数的方式得到较少的像素值。#include <opencv2\core\core.hpp>#include &l...原创 2019-03-30 14:58:14 · 481 阅读 · 0 评论 -
用最小外界矩形求零件角度,位置偏差
minAreaRect函数函数作用:主要求得包含点集最小面积的矩形,这个矩形是可以有偏转角度的,可以与图像的边界不平行RotatedRect minAreaRect(InputArray points) ; InputArray points:表示输入的点集RotatedRect它的返回值是矩形的四个顶点,中心点坐标,矩形角度通过轮廓点找到轮廓的最小外接矩形,同时返回上面的关于矩...原创 2019-03-26 18:47:18 · 455 阅读 · 0 评论 -
鼠标触发事件画矩形,选择roi区域
void CQRCodeDemoDlg::OnBnClickedSetRoi() //设置ROI区域{ src.copyTo(img); src.copyTo(tmp); //临时变量 namedWindow("view");//定义一个img窗口 setMouseCallback("view",on_mouse,0);//调用回调函数 ...转载 2019-03-26 19:49:24 · 1330 阅读 · 0 评论 -
遍历图片像素的三种方法
void colorReduce(Mat& inputImage, Mat& outputImage, int div){ outputImage = inputImage.clone(); int rows = outputImage.rows; int cols = outputImage.cols*outputImage.channels(); for (int i...原创 2019-03-30 15:06:55 · 2263 阅读 · 0 评论 -
图像金字塔详解
转载:https://www.cnblogs.com/wyuzl/p/6294275.html转载 2019-04-09 14:22:50 · 661 阅读 · 0 评论 -
直线拟合fitLine函数的用法
在霍夫检测直线的时候,一条直线会被检测出许多条,可以根据给定的点集拟合出一条直线的情形。 void cv::fitLine( cv::InputArray points, // 二维点的数组或vector cv::OutputArray line, // 输出直线,Vec4f (2d)或Vec6f (3d)的vector int distType, // 距离类型,要使输入点到拟合直...转载 2019-01-02 11:47:03 · 3894 阅读 · 0 评论