opencv c++
浅念念52
专注人工智能cv
展开
-
opencv 学习笔记(十六) 播放视频
类VideoCapture是opencv中基本的视频输入输出接口,它可以读取视频文件或打开摄像头,以提取视频帧,并提供多个函数获取视频的属性信息。简单看一下代码int main(){ Mat frame; VideoCapture a("E:\\桌面\\test.avi"); cout << a.get(CAP_PROP_FRAME_COUNT) << endl;//帧数 a >> frame; while (!frame.empty()) { im原创 2022-04-15 18:12:22 · 4344 阅读 · 2 评论 -
opencv 学习笔记(十五) 第三周总结
//1.包含必要的头文件;#include<opencv.hpp>#include<iostream>using namespace std;using namespace cv;#if 1void tong(Mat &img1, Mat &img2, Mat &img3){ int r = img1.rows; int c = img1.cols + 5 + img2.cols; img3.create(r, c, img1.type()原创 2022-04-11 16:16:29 · 3510 阅读 · 3 评论 -
opencv 学习笔记(十四) grabCut
grabCut前言一、grabCut函数二、compare函数三、代码前言grabCut算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只用少量的用户交互操作,即可得到比较好的分割结果,和分水岭顺丰比较相似,但是计算速度比较慢,得到的结果比较精确,用法:输入一幅图片并对一些像素做属于背景或属于前景的标记,算法会根据这个局部标记计算出整个图像中前景和背景的分割线。一、grabCut函数void grabCut(InputArray img, InputOutputArray mask, Re原创 2022-04-09 07:41:28 · 724 阅读 · 4 评论 -
opencv 学习笔记(十三) 图像金字塔
图像金字塔前言一、高斯金字塔1.pyrDown2.向下采样3pyrUp4向上采样二、拉普拉斯金字塔1.Laplacian2.代码前言图像金字塔是以多个分辨率来表示图像的一种有效且概念简单的结构。图像金字塔可以通过梯次向下采样获得,直至达到某个终止条件才停止采样,在向下采样中,层级越高,则图像越小,分辨率越低。图像金字塔分为两种,一种是高斯金字塔,一种是拉普拉斯金字塔。一、高斯金字塔高斯金字塔用来向下采样图片,在opencv中,向下采样使用的函数为pyrDown1.pyrDownvoid py原创 2022-04-07 08:42:38 · 4207 阅读 · 12 评论 -
opencv 学习笔记(十二) 第二周总结
//1.添加必要的头文件; 8:34#include<opencv.hpp>#include<iostream>using namespace std;using namespace cv;int main(){ //2.创建一个Mat对象,并读入附件build.jpg至Mat对象; 8:35 Mat img1; img1 = imread("build.jpg"); imshow("原图", img1); //3.利用平均值法公式D = (R +.原创 2022-04-06 10:25:18 · 2742 阅读 · 0 评论 -
opencv 学习笔记(十一) 灰度直方图
直方图的计算很简单,无非就是遍历图像的像素,统计每个灰度级的个数,opencv中calcHist函数能够同时计算过个图像,多个通道,不同灰度范围的灰度直方图。void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform =原创 2022-04-02 19:16:05 · 3679 阅读 · 8 评论 -
opencv 学习笔记(十) 图像边缘检测
Canny() Sobel() Scharr() Laplacian()原创 2022-04-01 12:51:49 · 3314 阅读 · 10 评论 -
opencv 学习笔记 (九) 几何变换
几何变换简介一、图像平移1.图像平移代码 (不改变图像大小)2.图像平移代码 (改变图像大小)二、图像旋转1.图像旋转函数2.仿射变换函数3.代码三、图像缩放1.图像缩放函数2.图像缩小代码3.图像放大代码总结简介图像的几何变换不改变图像的像素值,而是改变像素所在的几何位置,从变换的性质来分,图像的几何变换有图像的位置变换(平移,镜像,旋转)、图像的形状变换(放大,缩小,错切)等基本变换,以及图像的复合变换等,一、图像平移图像平移是将一幅图像中所有的点都按照指定的平移量在水平,垂直方向移动,平移原创 2022-03-31 10:06:32 · 2583 阅读 · 4 评论 -
opencv 学习笔记(八) 图像平滑
图像平滑前言一、均值滤波1.均值滤波函数2.均值滤波代码二、高斯滤波1.高斯滤波函数2.高斯滤波代码三、中值滤波1.中值滤波函数2.中值滤波代码四、双边滤波1.双边滤波函数1.双边滤波代码总结前言图像平滑是一种实用的数字图像处理技术,一个较好的平滑处理方法既能消除图像噪声,又不使图像边缘轮廓和线条变模糊。一、均值滤波归一化方框滤波器是很简单的滤波器,输出像素值是核窗口内像素值的均值,如果使用归一化处理,方框滤波就是均值滤波,实际上均值滤波是方框滤波归一化后的特殊情况。均值不能很好的保护细节。原创 2022-03-30 10:08:51 · 2888 阅读 · 8 评论 -
opencv 学习笔记(七) 灰度变换
灰度变换一、灰度变换概念二、灰度变换的作用三、灰度变换的方法灰度化一、灰度的概念二、对彩色图进行灰度化1.加权平均值法2.取最大值3.平均值灰度的线性变换1.线性变换2.分段线性变换灰度的非线性变换1.对数变换2.幂律变换总结一、灰度变换概念在图像预处理中,图像的灰度变换是图像增强的重要手段,灰度变换可以使图像对比度扩展,图像清晰,特征明显,灰度变换主要利用点运算来修正像素灰度,由输入像素点的灰度值确定相应输出点的灰度值,是一种基于图像变换的操作。二、灰度变换的作用1.改善图像是质量,显示更多的细原创 2022-03-29 09:56:53 · 8616 阅读 · 4 评论 -
opencv 学习笔记(六) 一周总结
1.读取图片 imread2.显示图片 imshow3.创建窗口 namedWindow4.颜色转换5.同一窗口 两张图片6.在图片上画线7.图片轮廓8.腐蚀与膨胀原创 2022-03-28 10:42:25 · 1708 阅读 · 0 评论 -
opencv 学习笔记(五) findContours() 函数与drawContours() 函数
opencv 中利用函数 findContours() 可以监测出物体的轮廓drawContours() 可以画出物体的轮廓findContours()函数源码void findContours(InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());image ,8位单通道图像。 非零像素被视为1。 零像素保持为0原创 2022-03-27 12:31:56 · 1402 阅读 · 0 评论 -
opencv学习笔记(四) 绘制几何图形
矩形 rectangle() 圆形 circle() 椭圆 ellipse()原创 2022-03-25 14:53:49 · 1575 阅读 · 0 评论 -
opencv学习笔记(三)颜色转换 cvtColor
在我们读取图像时通常会用到imread()函数,里面flags可以决定通道数,来得到我们想要的图像,比如:-1 按解码得到的方式读入图像;0 单通道 灰度图;1 三通道 彩色;当我们先要其他类型的图像时,这种方法就有一些局限性了,所以我们有必要了解cvtColor 这是一种颜色空间转换函数。先看源码:void cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0);src 输入图像dst 输出图像code 代码原创 2022-03-25 14:15:28 · 5896 阅读 · 5 评论 -
opencv学习笔记(二) 图像腐蚀和膨胀
1概念1.1 腐蚀跟膨胀是最基本的形态学运算1.2 腐蚀跟膨胀是对图像的白色的部分(亮光部分)进行操作1.3 腐蚀是对亮光部分进行腐蚀 拥有比原图更小的亮光部分1.4 膨胀是对亮光部分进行膨胀 拥有比原图更大的亮光部分这里有一个误区假如说在图片上的一个字,很多人都会认为膨胀是将图片上的字进行膨胀放大实则不然可以看到膨胀是将图片上的亮色区域进行放大,字就会变得更小,结构体够大的情况下,字就会看不见了**可以看到腐蚀是将图片上的亮色区域进行放小,字就会变得更大。2 膨胀1.先看膨胀函数原创 2022-03-24 11:18:55 · 5997 阅读 · 0 评论 -
opencv 学习笔记(一) 矩阵构造之输出
1构造1.1 Mat img; 只是创建了一个Mat信息头,不会创建数据区1.2 Mat::Mat(int rows,int cols,int type)rows 列数cols 行数type 类型Mat q = Mat::Mat(10, 1, CV_8UC3); cout << q; cout << endl;1.3 Mat::Mat(Size size,int type)创建大小为size,类型为type的图像这里注意一点在opencv中 Size是一个模原创 2022-03-23 18:08:49 · 2635 阅读 · 0 评论 -
opencv 图片上画一条线
1在图片上用鼠标进行操作,opencv主要用到setMouseCallback()函数。winname 窗口名称onMouse 鼠标事件的回调函数userdata 传递给回调函数还有onMouse函数event 鼠标事件x,y 鼠标在图片上的坐标flags 鼠标事件标志这里有一个容易搞混的地方void跟void*在函数的返回值中, void 是没有任何返回值, 而 void * 是返回任意类型的值的指针.划线还需要用到line()函数img 图片名称pt1 线段起点pt2原创 2022-03-22 17:52:34 · 3868 阅读 · 0 评论 -
opencv 原图与灰度图在同一窗口显示
一个窗口,两张图片原创 2022-03-22 09:47:48 · 1355 阅读 · 0 评论