openCV学习教程(一):Mat类的使用
Opencv3-Study
- Opencv学习笔记(八) -- 图像色彩空间转换
- yuv422转opencv mat显示
- OpenCv2 学习笔记(1) Mat创建、复制、释放
- OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- Mat的几种初始化
- Mat类之选取图像局部区域
- 画矩形框(普通的与旋转的矩形框)
- 绘制连续多个矩形:
- 捕获右上角×按钮关闭显示窗口事件
- OpenCV 计算图像的直方图,平均灰度,灰度方差
- meanStdDev函数
- OpenCV常用库函数
- 鼠标操作
- setMouseCallback:
- 调试:
- 有未经处理的异常: Microsoft C++ 异常: cv::Exception
Opencv学习笔记(八) – 图像色彩空间转换
https://blog.csdn.net/u014337397/article/details/80834689
yuv422转opencv mat显示
rgb转成mat
Mat image(IMAGE_HEIGHT, IMAGE_WIDTH, CV_8UC3, buffer);//buffer为转完的rgb数据
实例:
Mat depthout(cv::Size(3072, 2048), CV_8UC3, stConvertParam.pDstBuffer);
OpenCv2 学习笔记(1) Mat创建、复制、释放
原文链接:https://blog.csdn.net/wanggao_1990/article/details/53150926
OpenCv学习笔记(二)–Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
https://blog.csdn.net/maweifei/article/details/51221259
Mat的几种初始化
(1) Mat::Mat()
(2) Mat::Mat(int rows, int cols, int type)
(3) Mat::Mat(Size size, int type)
(4) Mat::Mat(int rows, int cols, int type, constScalar& s)
(5) Mat::Mat(Size size, int type, constScalar& s)
(6) Mat::Mat(const Mat& m)
(7) Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
(8) Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)
(9) Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)
(10) Mat::Mat(const Mat& m, const Rect& roi)
(11) Mat::Mat(const CvMat* m, bool copyData=false)
(12) Mat::Mat(const IplImage* img, bool copyData=false)
(13) template<typename T, int n> explicit Mat::Mat(const Vec<T, n>& vec, bool copyData=true)
(14) template<typename T, int m, int n> explicit Mat::Mat(const Matx<T, m, n>& vec, bool copyData=true)
(15) template explicit Mat::Mat(const vector& vec, bool copyData=false)
(16) Mat::Mat(const MatExpr& expr)
(17) Mat::Mat(int ndims, const int* sizes, int type)
(18) Mat::Mat(int ndims, const int* sizes, int type, constScalar& s)
(19) Mat::Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0)
(20) Mat::Mat(const Mat& m, const Range* ranges)
延伸:OpenCv学习笔记(二)–Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
Mat类之选取图像局部区域
https://blog.csdn.net/shenwanjiang111/article/details/54318958
Mat的一个构造函数 C++: Mat::Mat(int rows, int cols, int type, const Scalar& s) ,其中rows和cols是需要创建的矩阵的行数和列数,type是Mat的数据类型,s是Scalar类型的矩阵初值。
画矩形框(普通的与旋转的矩形框)
https://blog.csdn.net/weixin_42755384/article/details/88561526
绘制连续多个矩形:
参考代码:
#include <iostream>
#include <opencv2/opencv.hpp>#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"//连续画矩形框
using namespace cv;
using namespace std;
//去掉以上两行代码注释之后就可以不用在下面的代码中加上cv::和std::
//cv::为OpenCV的函数库
//std::为C++的标准函数库void OnMouseAction(int event, int x, int y, int flags, void *ustc); //鼠标回调事件函数
Rect rect,temp;
Mat src, src1;void draw_rec(Mat str, Mat src1);
void draw_rec1(Mat str, Mat src1);
int static times; //记录调用次数
int DrawRect();
int rec_num;int main(int argc, char*argv[])
{//以下的方法如果想运行,直接把前头的注释去掉即可//运行代码的时候请改掉filename里的地址//我的opencv是安装在C盘目录下//一些目录地址请自行修改一下//DrawRect(); //在图像上画四边形const char* filename = "E:\\projects\\darknet-master\\build\\darknet\\x64\\data\\voc\\VOCdevkit\\VOC2007\\JPEGImages\\img1.bmp";src = imread(filename);imshow("title", src);rec_num = 0;setMouseCallback("title", OnMouseAction, 0);waitKey(0);return 0;
}
//*******************************************************************//
//鼠标回调函数void OnMouseAction(int event, int x, int y, int flags, void *ustc)
{times++;switch (event){//左键按下事件case EVENT_LBUTTONDOWN://左键按下 定义起始点rect.x = x;rect.y = y;rect.width = 1;rect.height = 1;cout << "触发左键按下坐标为" << x << "," << y << endl;break;//鼠标移动事件case CV_EVENT_MOUSEMOVE://当左键按下时根据左键起始点绘制生成的矩形if (flags&EVENT_FLAG_LBUTTON){rect = Rect(Point(rect.x, rect.y), Point(x, y));draw_rec1(src,src1); //鼠标移动过程中显示移动轨迹}break;//左键松开事件case CV_EVENT_LBUTTONUP:if (rect.width > 1 && rect.height > 1){draw_rec(src,src1);rec_num++;}cout << "触发左键松开坐标为" << x << "," << y << endl;cout << "选中区域个数为" << rec_num << endl;default:break;}//cout << "第 " << times << " 次回调鼠标事件" << endl;//if (event == CV_EVENT_MOUSEMOVE)//{// cout << "触发鼠标移动事件" << endl;//}//if (event == CV_EVENT_LBUTTONDOWN)//{// cout << "触发左键按下事件" << endl;//}//if (event == CV_EVENT_LBUTTONUP)//{// cout << "触发左键抬起事件" << endl;//}//if (event == CV_EVENT_RBUTTONDOWN)//{// cout << "触发右键按下事件" << endl;// DrawRect(); //在图像上画四边形//}//if (event == CV_EVENT_RBUTTONUP)//{// cout << "触发右键抬起事件" << endl;//}//if (event == CV_EVENT_LBUTTONDBLCLK)//{// cout << "触发左键双击事件" << endl;//}//if (event == CV_EVENT_RBUTTONDBLCLK)//{// cout << "触发右键双击事件" << endl;//}
}void draw_rec(Mat src, Mat src1)
{src.copyTo(src1);rectangle(src1, rect, Scalar(0, 0, 255));src1.copyTo(src);imshow("title", src1);}void draw_rec1(Mat src, Mat src1)
{src.copyTo(src1);rectangle(src1, rect, Scalar(0, 0, 255));imshow("title", src1);}int DrawRect() {const char* filename = "E:\\projects\\darknet-master\\build\\darknet\\x64\\data\\voc\\VOCdevkit\\VOC2007\\JPEGImages\\img1.bmp";cv::Mat mat = cv::imread(filename);if (mat.empty()) {throw("Faild open file.");}cv::Point p0 = cv::Point(mat.cols / 8, mat.rows / 8);cv::Point p1 = cv::Point(mat.cols * 7 / 8, mat.rows * 7 / 8);//设定点的起始和终止坐标rectangle(mat, p0, p1, cv::Scalar(0, 255, 0), 5, 8);//画四边形的函数//第一个参数为画图的目标图像//第二个参数为画图的起始坐标//第三个参数为画图的终止坐标//第四个参数为画图的颜色cv::Point p2 = cv::Point(mat.cols * 2 / 8, mat.rows * 2 / 8);cv::Point p3 = cv::Point(mat.cols * 6 / 8, mat.rows * 6 / 8);rectangle(mat, p2, p3, cv::Scalar(0, 255, 255), 2, 4);cv::imshow("mat", mat);//cv::imwrite("C:\\Code\\FirstOpenCVProgramming\\DrawRect.jpg", mat);cv::waitKey();return 0;
}
捕获右上角×按钮关闭显示窗口事件
在显示循环中加入代码:
if(!cvGetWindowHandle("窗口名字")) {break;}
OpenCV 计算图像的直方图,平均灰度,灰度方差
https://www.cnblogs.com/ybqjymy/p/13650613.html
meanStdDev函数
计算矩阵的均值和标准偏差。
C++:
void meanStdDev(InputArray src,OutputArray mean, OutputArray stddev, InputArray mask=noArray())
C:
void cvAvgSdv(constCvArr* arr, CvScalar* mean, CvScalar* std_dev, const CvArr* mask=NULL )
Python:
cv.AvgSdv(arr,mask=None) -> (mean, stdDev)
parameter:
src:输入矩阵,这个矩阵应该是1-4通道的,这可以将计算结果存在Scalar_ ‘s中
mean:输出参数,计算均值
stddev:输出参数,计算标准差
mask:可选参数
OpenCV常用库函数
原文链接:https://blog.csdn.net/weixin_42029090/article/details/80618208
鼠标操作
setMouseCallback:
https://blog.csdn.net/qq_29540745/article/details/52562101
void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)winname:窗口的名字onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);userdate:传给回调函数的参数
附常用的event:
#defineCV_EVENT_MOUSEMOVE
#defineCV_EVENT_LBUTTONDOWN
#defineCV_EVENT_RBUTTONDOWN
#defineCV_EVENT_LBUTTONUP
#defineCV_EVENT_RBUTTONUP
和标志位flags有关的:
#defineCV_EVENT_FLAG_LBUTTON
注意: flags & CV_EVENT_FLAG_LBUTTON 的意思是 提取flags的CV_EVENT_FLAG_LBUTTON 标志位,!()的意思是 标志位无效
Opencv中setMouseCallback()创建了一个鼠标回调函数,每次在图像上单击鼠标左键再抬起的过程,都会分3次调用鼠标响应函数,并且响应顺序是:
1.左键单击按下;
2.左键单击抬起;
3.鼠标指针位置移动(即使原地单击,鼠标位置并没有移动);
调试:
有未经处理的异常: Microsoft C++ 异常: cv::Exception
原因:内存溢出,将路径中斜杠改为“\”
openCV学习教程(一):Mat类的使用相关推荐
- OpenCV学习三:Mat类详解
目标 我们有多种方法可以获得从现实世界的数字图像:数码相机.扫描仪.计算机体层摄影或磁共振成像就是其中的几种.在每种情况下我们(人类)看到了什么是图像.但是,转换图像到我们的数字设备时我们的记录是图像 ...
- OpenCV学习笔记之Mat
一. Mat介绍 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教 ...
- OpenCV参考手册之Mat类详解
OpenCV参考手册之Mat类详解(一) OpenCV参考手册之Mat类详解(二) OpenCV参考手册之Mat类详解(三)
- OpenCV参考手册之Mat类详解1
Mat类 OpenCV c + + n 维稠密数组类 class CV_EXPORTS Mat { public: / / - -很多的方法... ... /*!包括几位字段: -神奇的签名 -连续性 ...
- OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
(一)Mat矩阵(图像容器)创建时CV_8UC1,CV_8UC2等参数详解 1--Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类 2--创建一个Mat对象的方法很多,我们现在先看一下M ...
- OpenCV参考手册之Mat类详解(一)
Mat类 OpenCV c + + n 维稠密数组类 class CV_EXPORTS Mat { public: / / - -很多的方法... ... /*!包括几位字段: -连续性标志 -深度( ...
- OpenCV中基本数据类型Mat类使用简析
Mat 类是OpenCV中的一个基本数据类型,它是一个n维密集数组类 Mat 类表示一个 n 维密集数值单通道或多通道数组.它可用于存储实数或复值向量和矩阵.灰度或彩色图像.体素体积.向量场.点云.张 ...
- OpenCV参考手册之Mat类详解(三)
Mat::eye 返回一个恒等指定大小和类型矩阵. C++: static MatExpr Mat::eye(int rows, int cols, inttype) C++: static MatE ...
- OpenCV学习笔记三-Mat数据结构
主要记录Mat数据结构的一些操作 P3 Mat 数据结构的一些操作 #include<opencv2/opencv.hpp> #include<iostream>using n ...
最新文章
- PHP的学习--PHP的引用
- NumPy迎来重大版本更新,新增函数注释、滑动窗口视图功能,仅支持Python 3.7以上版本...
- java remove removeat_2016.3.12 Java中ArrayList类详解(转)
- 你为什么薪水那么低(二)之 生产力
- 如何优雅的理解ECMAScript中的对象
- .NetCore+WebUploader实现大文件分片上传
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- 曙光中学2021年高考成绩查询,2021年自贡高考状元名单公布,自贡高考状元学校资料及最高分...
- android webview 重定向 多次load问题,关于WebView 重定向行为导致的多次加载的问题...
- idea怎么创建python项目
- java写入到excel表格乱码怎么办,数据库导出excel表格是乱码-java导出excel表格乱码!...
- Workbench Command——cifti格式操作,如何制作label文件即 Human_MMP.lh.label.gii?
- mac电脑的vue问题
- 喜报云报销与携程商旅达成战略合作 联手打造一站式差旅管理服务
- 外部web端访问微信小程序云数据库的几种方法
- 深度学习:图像的卷积原理和本质(详解)。
- c语言编程送小狗回家,【原创】《My Sherlock Ⅱ 》(BY C语言概率论)
- 查询分析器里查看执行计划
- 标准和非标poe交换机如何选择
- 罗振宇2021跨年演讲7:2060“碳中和”跟你有多大关系?
热门文章
- linux看进程所在,linux 查看进程所在目录
- 怎样查看电脑系统版本_微信7.0.0自动更新后怎样去还原以前的旧版本?
- 为什么魂斗罗只有 128 KB却可以实现那么长的剧情?
- Java 集合系列(2): ArrayList源码深入解析和使用示例
- javascript高精度计算解决方案
- JPA保存数据异常:org.hibernate.AnnotationException: @COLUMN(s) NOT allowed ON a @ManyToOne property
- Integer类对象池与==问题:Integer a=34556,b=34556;但a==b为false
- Arduino作为服务器显示温度,基于Arduino 带LCD显示的电子温度计
- asin c语言中 返回值范围_asin()_C语言asin()详解:反正弦函数,求反正弦值
- 玩转服务器(华为云)—购买配置登录篇