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. PHP的学习--PHP的引用
  2. NumPy迎来重大版本更新,新增函数注释、滑动窗口视图功能,仅支持Python 3.7以上版本...
  3. java remove removeat_2016.3.12 Java中ArrayList类详解(转)
  4. 你为什么薪水那么低(二)之 生产力
  5. 如何优雅的理解ECMAScript中的对象
  6. .NetCore+WebUploader实现大文件分片上传
  7. Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
  8. 曙光中学2021年高考成绩查询,2021年自贡高考状元名单公布,自贡高考状元学校资料及最高分...
  9. android webview 重定向 多次load问题,关于WebView 重定向行为导致的多次加载的问题...
  10. idea怎么创建python项目
  11. java写入到excel表格乱码怎么办,数据库导出excel表格是乱码-java导出excel表格乱码!...
  12. Workbench Command——cifti格式操作,如何制作label文件即 Human_MMP.lh.label.gii?
  13. mac电脑的vue问题
  14. 喜报云报销与携程商旅达成战略合作 联手打造一站式差旅管理服务
  15. 外部web端访问微信小程序云数据库的几种方法
  16. 深度学习:图像的卷积原理和本质(详解)。
  17. c语言编程送小狗回家,【原创】《My Sherlock Ⅱ 》(BY C语言概率论)
  18. 查询分析器里查看执行计划
  19. 标准和非标poe交换机如何选择
  20. 罗振宇2021跨年演讲7:2060“碳中和”跟你有多大关系?

热门文章

  1. linux看进程所在,linux 查看进程所在目录
  2. 怎样查看电脑系统版本_微信7.0.0自动更新后怎样去还原以前的旧版本?
  3. 为什么魂斗罗只有 128 KB却可以实现那么长的剧情?
  4. Java 集合系列(2): ArrayList源码深入解析和使用示例
  5. javascript高精度计算解决方案
  6. JPA保存数据异常:org.hibernate.AnnotationException: @COLUMN(s) NOT allowed ON a @ManyToOne property
  7. Integer类对象池与==问题:Integer a=34556,b=34556;但a==b为false
  8. Arduino作为服务器显示温度,基于Arduino 带LCD显示的电子温度计
  9. asin c语言中 返回值范围_asin()_C语言asin()详解:反正弦函数,求反正弦值
  10. 玩转服务器(华为云)—购买配置登录篇