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类的使用相关推荐

  1. OpenCV学习三:Mat类详解

    目标 我们有多种方法可以获得从现实世界的数字图像:数码相机.扫描仪.计算机体层摄影或磁共振成像就是其中的几种.在每种情况下我们(人类)看到了什么是图像.但是,转换图像到我们的数字设备时我们的记录是图像 ...

  2. OpenCV学习笔记之Mat

    一. Mat介绍 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教 ...

  3. OpenCV参考手册之Mat类详解

    OpenCV参考手册之Mat类详解(一) OpenCV参考手册之Mat类详解(二) OpenCV参考手册之Mat类详解(三)

  4. OpenCV参考手册之Mat类详解1

    Mat类 OpenCV c + + n 维稠密数组类 class CV_EXPORTS Mat { public: / / - -很多的方法... ... /*!包括几位字段: -神奇的签名 -连续性 ...

  5. OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解

    (一)Mat矩阵(图像容器)创建时CV_8UC1,CV_8UC2等参数详解 1--Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类 2--创建一个Mat对象的方法很多,我们现在先看一下M ...

  6. OpenCV参考手册之Mat类详解(一)

    Mat类 OpenCV c + + n 维稠密数组类 class CV_EXPORTS Mat { public: / / - -很多的方法... ... /*!包括几位字段: -连续性标志 -深度( ...

  7. OpenCV中基本数据类型Mat类使用简析

    Mat 类是OpenCV中的一个基本数据类型,它是一个n维密集数组类 Mat 类表示一个 n 维密集数值单通道或多通道数组.它可用于存储实数或复值向量和矩阵.灰度或彩色图像.体素体积.向量场.点云.张 ...

  8. OpenCV参考手册之Mat类详解(三)

    Mat::eye 返回一个恒等指定大小和类型矩阵. C++: static MatExpr Mat::eye(int rows, int cols, inttype) C++: static MatE ...

  9. OpenCV学习笔记三-Mat数据结构

    主要记录Mat数据结构的一些操作 P3 Mat 数据结构的一些操作 #include<opencv2/opencv.hpp> #include<iostream>using n ...

最新文章

  1. ABBYY PDF Transformer+支持的格式
  2. java usc2短信编码_手机短信PDU编码与解码
  3. C语言字符串是否为pallindrome排列的算法(附完整源码)
  4. 四针角oled屏连接arduino_使用Arduino开发板连接OLED显示屏制作一款智能手表
  5. 64位ubuntu 12.04编译linux内核提示mkimage command not found
  6. Qt样例学习1(数字时钟)
  7. java udp套接字_Java - UDP通过套接字发送数据..没有记录。所有数据
  8. gitlab之常用命令
  9. backbone, AngularJS, EmberJS 简单比较
  10. windows c++ 流读取文件长度 ios::in ios::binary
  11. 解决input输入中文时,拼音在输入框内会触发input事件的问题
  12. html怎么把正方形改成圆形,css怎样让div变成圆的?
  13. 用ECS做HexMap:鼠标点击六边形单元涂色
  14. 金融 python 招聘,滴滴、度小满金融python工程师社招面经
  15. 如何为 360 度审核提供同事反馈
  16. Mentor Graphics ModelSim SE 10.5官方原版+完美破解
  17. vvic、lazada等国内小众电商平台商品详情API调用展示
  18. 阿达(Ada Lovelace)
  19. 基于云平台服务器的数据处理方法及系统,基于云平台的有毒有害气体监测系统解决方案...
  20. HTML列表详解(重点掌握无序列表)

热门文章

  1. 如何根据sessionID获取session解决方案
  2. 蓝桥杯练习系统习题-历年真题解析1(完整版)
  3. Andoid自定义View的OnMeasure详解和自定义属性
  4. bash ps1变量_在 Linux 中打扮你的冬季 Bash 提示符
  5. 网络爬虫:基于对象持久化实现爬虫现场快速还原
  6. Android中对APK进行反编译
  7. [转]oracle查看数据文件, 控制文件, 及日志文件命令
  8. 高斯拟合原理_AlexNet原理和实现
  9. python和vba操作excel_python调用excel中VBA代码
  10. java正三角形程序怎么写,java实现正三角形和到正三角形