商城网站 运营,同城推广有什么平台,系统开发报价清单明细,关键字优化工具1.图像读写与窗口显示
1.1.imread读取图像文件 Mat cv::imread(const string filename,int flags IMREAD_COLOR); filename#xff1a;要读取的图像文件名flags#xff1a;读取模式#xff0c;可以从枚举cv::ImreadModes中取值#xff0c;默认取值是IMREAD_COLORfilename,int flags IMREAD_COLOR); filename要读取的图像文件名flags读取模式可以从枚举cv::ImreadModes中取值默认取值是IMREAD_COLOR表示始终将图像转换为三通道RGB彩色图像
如果从指定文件加载图像成功就返回Mat矩阵否则就返回空矩阵
1.2.imwrite保存图片 bool cv::imwrite(const string filename,InputArray img,const std::vectorint paramsstd::vectorint()); filename需要写入的文件名必须加上后缀imgMat类型数据要保存到文件当中的源图像数据params特定格式保存的参数编码一般不用写
1.3.新建窗口并显示 void nameWindow(const string winname,int flags); winname新建的窗口的名称flags窗口的标识一般默认为WINDOW_AUTOSIZE WINDOW_AUTOSIZE窗口自适应图片大小并且不可手动更改WINDOW_NORMAL用户可以改变这个窗口的大小WINDOW_OPENGL窗口创建的时候支持OpenGL void imshow(const string winname,InputArray img); winname显示的窗口名可以使用nameWindow函数创建窗口如不创建imshow将自动创建img窗口中需要显示的图像
根据图像的深度imshow会自动对其进行缩放规则如下
如果图像数据类型是8U就直接显示如果图像数据类型是16U或32Simshow函数就会自动将每个像素值除以256并显示即将原图像素值的范围由[0~255*256]映射到[0~255]如果图像数据类型是32F或64Fimshow函数就会自动将每个像素值除以255并显示即将原图像素值的范围由[0~1]映射到[0~255]注意原图像素值必须归一化
1.4.销毁窗口 //销毁一个指定名称的窗口 void destoryWindow(const string winnanme); //销毁全部窗口 void destoryAllWindows(); 1.5.调整窗口大小 void resizeWindow(const string winname,int width,int height); winname要调整尺寸的窗口名称width调整后的窗口宽度height调整后的窗口高度
2.OpenCV中的事件
2.1.鼠标事件 void setMousecallback(const string winname,MouseCallback onMouse,void *userdata0); winname窗口的名字onMouse鼠标事件响应的回调函数指针userdata传给回调函数的参数
鼠标事件回调函数类型MouseCallback定义如下 typedef void(* cv::MouseCallback)(int event,int x,inty,int flags,void *userdata); event鼠标事件
enum{EVENT_MOUSEMOVE0, //滑动EVENT_LBUTTONDOWN1, //左键单击EVENT_RBUTTONDOWN2, //右键单击EVENT_MBUTTONDOWN3, //中键单击EVENT_LBUTTONUP4, //左键放开EVENT_RBUTTONUP5, //右键放开EVENT_MBUTTONUP6, //中建放开EVENT_LBUTTONDBLCLK7,//左键双击EVENT_RBUTTONDBLCLK8,//右键双击EVENT_MBUTTONDBLCLK9 //中键双击
}
x鼠标事件的x坐标
y鼠标事件的y坐标
flags鼠标事件的标志
enum{EVENT_FLAG_LBUTTON1, //左键拖拽EVENT_FLAG_RBUTTON2, //右键拖拽EVENT_FLAG_MBUTTON4, //中键拖拽EVENT_FLAG_CTRLKEY8, //按CTRLEVENT_FLAG_SHIFTKEY16, //按SHIFTEVENT_FLAG_ALTKEY32 //按ALT
}
userdata可选的参数
2.2.键盘事件 int waitKey(int delay0); delay延时的时间单位是毫秒默认是0表示永久等待。该函数在至少创建了一个窗口并该窗口处于活动状态才有效如果有多个窗口则其中任何一个都可以处于活动状态。在小于等于0时表示等待时间无限长为正整数n时至少等待n毫秒才结束。在等待期间按任意按键函数结束返回按键的键值ASCII码等待时间结束仍未按下按键则返回-1。
2.3.滑动条事件
//创建滑动条
int cv::createTrackbar(const string trackbarname,const string winname,int *value,int count,TrackCallback onChange0,void *userdata0);//回调函数类型TrackbarCallback的定义
typedef void(* cv::TrackbarCallback)(int pos,void *userdata);//获取滑动块的位置
int cv::getTrackbarpos(const string trackName,const string winname);//设置滑动块的位置
void cv::setTrackbarPos(const string trackName,const string winname,int pos);
3.矩阵操作
3.1.构造矩阵
Mat::Mat()
Mat::Mat(int rows,int cols,int type)
Mat::Mat(Size size,int type)
Mat::Mat(int rows,int cols,int type,const Scalar s)
Mat::Mat(Size size,int type,const Scalar s)
Mat::Mat(const Mat m)
Mat::Mat(int rows,int cols,int type,void *data,size_t stepAUTO_STEP)
Mat::Mat(Size size,int type,void *data,size_t stepAUTO_STEP)
Mat::Mat(const Mat m,const Range rowRange,const Range colRange)
Mat::Mat(const Mat m,const Rect roi)
Mat::Mat(int ndims,const int *sizes,int type,const Scalar s)
void create(int rows,int cols,int type)
3.2.构造特殊矩阵
//定义全0矩阵
static MatExpr zeros(int rows,int cols,int type)
static MatExpr zeros(Size size,int type)
static MatExpr zeros(int ndims,const int *sz,int type)//定义全1的矩阵
static MatExpr ones(int rows,int cols,int type)
static MatExpr ones(Size size,int type)
static MatExpr ones(int ndims,const int *sz,int type)//定义对角线为1的矩阵
static MatExpr eye(int rows,int cols,int type)
static MatExpr eye(Size size,int type)
3.3.获取矩阵的属性
Mat类提供了如下公有成员变量
rows矩阵的行数cols矩阵的列数dims矩阵的维数uchar *cv::Mat::data指向Mat数据部分的首地址
//获得矩阵通道数
int channels();//判断矩阵是否为空
bool empty()//获取矩阵的总个数
size_t Mat::total();
3.4.复制矩阵
//深复制
Mat clone();
void copyTo(OutputArray m);
void copyTo(OutputArray m,InputArray mask);//浅复制赋值运算符和拷贝构造函数
Mat dstsrc;
Mat dst(src);
4.图像处理基础
4.1.颜色变换 void cvtColor(InputArray src,OutputArray dst,int code,int dstCn0); src输入图像dst输出图像code转换的代码或标识dstCn目标图像的通道数默认取值为0如果取值为0就由src和dst决定
4.2.画矩形 void cv::rectangle(InputOutputArray img,Point p1,Point p2,const SCalar color,int thickness1,int lineTypeLINE_8,int shift0); void cv::rectangle(InputOutputArray img,Rect rec,const SCalar color,int thickness1,int lineTypeLINE_8,int shift0); img矩形所在的图像p1矩形的一个顶点p2矩形对角线上的另一个顶点color线条的颜色thickness线条的粗细程度取负值如CV_FILLED函数绘制填充了色彩的矩形lineType线条的类型shift坐标点的小数点位数
4.3.画圆 void cv::circle(InputOutputArray img,Point center,int radius,const SCalar color,int thickness1,int lineTypeLINE_8,int shift0); img圆所在的图像center圆心的坐标radius圆的半径color线条的颜色thickness线条的粗细程度取负值如CV_FILLED函数绘制填充了色彩的圆形lineType线条的类型shift坐标点的小数点位数
4.4.画椭圆 void cv::ellipse(InputOutputArray img,Point center,Size axes,double angle,double startAngle,double endAngle,const SCalar color,int thickness1,int lineTypeLINE_8,int shift0); img椭圆所在的图像center椭圆圆心的坐标axes轴的长度angle偏转的角度startAngle圆弧起始角的角度endAngle圆弧终结角的角度color线条的颜色thickness线条的粗细程度lineType线条的类型shift坐标点的小数点位数
4.5.画线段 void cv::line(InputOutputArray img,Point p1,Point p2,const SCalar color,int thickness1,int lineTypeLINE_8,int shift0); img线段所在的图像p1线段起始点p2线段结束点color线条的颜色thickness线条的粗细程度lineType线条的类型shift坐标点的小数点位数
4.6.多边形填充 void cv::fillPoly(Mat img,const Point **pts,const int *npts,int ncountours,const Scalar color,int lineTypeLINE_8,int shift0,Point offsetPoint()); img输入图像pts多边形点集color多边形颜色lineType线条的类型shift坐标点的小数点位数offset等高线所有点的偏移
4.7.文字绘制 //绘制文字 void cv::putText(cv::Mat img,const string text,cv::Point origin,int fontFace,double fontScale,cv::Scalar color,int thickness1,int lineType8,bool bottomLeftOriginfalse); //获取字符串的长度和宽度 Size cv::getTextSize(const string text,cv::Point origin,int fontFace,double fontScale,int thickness,int *baseLine); img待绘制的图片text待绘制的文字origin文本框的左下角fontFace字体fontScale尺寸因子值越大字体越大color线条颜色thickness线条宽度lineType线条类型baseLine文字最底部的y坐标
4.8.随机数
//使用种子产生一个32位随机整数
RNG();
RNG(uint64 state);
RNG rng; //创建RNG对象使用默认种子-1
int N1 rng;//产生32位整数其实rng既是一个RNG对象又是一个随机整数//产生一个均匀分布的随机数返回一个[a,b)范围的均匀分布的随机数
int uniform(int a,int b);//产生一个高斯分布的随机数返回一个均值为0标准差为sigma的高斯分布1的随机数)
double gaussian(double sigma);//返回下一个随机数
unsigned next();//用随机数填充矩阵
void fill(InputOutputArray mat,int distType,InputArray a,InputArray b,bool saturateRangefalse);
4.9.为图像添加边框 void cv::copyMakeBorder(InputArray src,OutputArray ddst,int top,int bottom,int left,int right,int borderType,const Scalar valueScalar()); src输入图像dst输出图像top、bottom、left、right表示源图像在4个方向上扩充多少像素borderType边界类型 BORDER_REPLICATE复制法复制最边缘的像素扩充边界BORDER_REFLECT_101对称法以最边缘的像素为轴对称填充BORDER_CONSTANT常量法以一个常量像素值填充扩充的边界BORDER_REFLECT和对称法原理一致不过连最边缘的像素也要对称过去BORDER_WRAP用另一侧的元素来填充这一侧的扩充边界
4.10.在图像当中查找轮廓
//查找轮廓
void cv::findContours(InputArray image,OutPutArrayOfArrays contours,OutPutArray hierarchy,int mode,int method,Point offsetPoint());//绘制轮廓
void cv::drawContours(InputOutputArray image,OutPutArrayOfArrays contours,int contourIdx,const Scalar color,int thickness1,int lineTypeLINE_8,InputArray hierarchynoArray(),int maxLevelINT_MAX,Point offsetPoint());
5.视频处理
5.1.播放视频文件
#include opencv2/core/core.hpp
#include opencv2/highgui/highgui.hpp
#include opencv2/imgproc/imgproc.hpp
#include iostream
using namespace cv;
using namespace std;void processiamge(Mat frame)
{circle(frame, Point(cvRound(frame.cols / 2), cvRound(frame.rows / 2)), 150, Scalar(0, 0, 255), 2, 8);
}int main()
{string filename 1.avi;//打开的视频文件VideoCapture capture;capture.open(filename);double rate capture.get(CV_CAP_PROP_FPS);//获取视频文件的帧率int delay cvRound(1000.000 / rate);if (!capture.isOpened())//判断是否打开视频文件{return -1;}else{while (true){Mat frame;//capture.read(frame);capture frame;//读出每一帧的图像if (frame.empty()) break;imshow(处理前视频, frame);processiamge(frame);imshow(处理后视频, frame);waitKey(delay);}}return 0;
}
5.2.设置和获取视频属性 //获取属性 double get(int propId); //设置属性 bool set(int propId,double value); 5.3.播放摄像头视频
#include opencv2/core/core.hpp
#include opencv2/highgui/highgui.hpp
#include opencv2/imgproc/imgproc.hpp
#include iostream
using namespace cv;
using namespace std;void processiamge(Mat frame)
{circle(frame, Point(cvRound(frame.cols / 2), cvRound(frame.rows / 2)), 150, Scalar(0, 0, 255), 2, 8);
}int main()
{VideoCapture capture;capture.open(0);//0表示摄像头的索引号double rate capture.get(CV_CAP_PROP_FPS);//获取视频文件的帧率int delay cvRound(1000.000 / rate);if (!capture.isOpened())//判断是否打开视频文件{return -1;}else{while (true){Mat frame;//capture.read(frame);capture frame;//读出每一帧的图像if (frame.empty()) break;imshow(处理前视频, frame);processiamge(frame);imshow(处理后视频, frame);waitKey(delay);}}return 0;
}
5.4.录制视频
#include opencv2/core/core.hpp
#include opencv2/highgui/highgui.hpp
using namespace cv;void main()
{VideoCapture capture(0);//如果是笔记本0打开的是自带的摄像头1 打开外接的相机double rate 25.0;//视频的帧率Size videoSize(1280,960);VideoWriter writer(VideoTest.avi, CV_FOURCC(M, J, P, G), rate, videoSize);Mat frame;while (capture.isOpened()){capture frame;writer frame;imshow(video, frame);if (waitKey(20) 27)//27是键盘摁下esc时计算机接收到的ascii码值{break;}}
}
文章转载自: http://www.morning.sfdsn.cn.gov.cn.sfdsn.cn http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn http://www.morning.bpmmq.cn.gov.cn.bpmmq.cn http://www.morning.gbpanel.com.gov.cn.gbpanel.com http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn http://www.morning.yhwyh.cn.gov.cn.yhwyh.cn http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn http://www.morning.lnrhk.cn.gov.cn.lnrhk.cn http://www.morning.svtxeu.com.gov.cn.svtxeu.com http://www.morning.ckctj.cn.gov.cn.ckctj.cn http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn http://www.morning.dzqyn.cn.gov.cn.dzqyn.cn http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn http://www.morning.skdrp.cn.gov.cn.skdrp.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn http://www.morning.xqffq.cn.gov.cn.xqffq.cn http://www.morning.nfbnl.cn.gov.cn.nfbnl.cn http://www.morning.rksnk.cn.gov.cn.rksnk.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.bxhch.cn.gov.cn.bxhch.cn http://www.morning.gcdzp.cn.gov.cn.gcdzp.cn http://www.morning.hybmz.cn.gov.cn.hybmz.cn http://www.morning.ho-use.cn.gov.cn.ho-use.cn http://www.morning.c7501.cn.gov.cn.c7501.cn http://www.morning.gczqt.cn.gov.cn.gczqt.cn http://www.morning.ykmtz.cn.gov.cn.ykmtz.cn http://www.morning.drhnj.cn.gov.cn.drhnj.cn http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.gassnw.com.gov.cn.gassnw.com http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.qsfys.cn.gov.cn.qsfys.cn http://www.morning.trrhj.cn.gov.cn.trrhj.cn http://www.morning.lszjq.cn.gov.cn.lszjq.cn http://www.morning.sftrt.cn.gov.cn.sftrt.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.lzzqz.cn.gov.cn.lzzqz.cn http://www.morning.ngkgy.cn.gov.cn.ngkgy.cn http://www.morning.tlfmr.cn.gov.cn.tlfmr.cn http://www.morning.fldrg.cn.gov.cn.fldrg.cn http://www.morning.dhckp.cn.gov.cn.dhckp.cn http://www.morning.cnqff.cn.gov.cn.cnqff.cn http://www.morning.nzkc.cn.gov.cn.nzkc.cn http://www.morning.mprpx.cn.gov.cn.mprpx.cn http://www.morning.snnb.cn.gov.cn.snnb.cn http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn http://www.morning.wqkfm.cn.gov.cn.wqkfm.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.hxhrg.cn.gov.cn.hxhrg.cn http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn http://www.morning.kttbx.cn.gov.cn.kttbx.cn http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn http://www.morning.bqyb.cn.gov.cn.bqyb.cn http://www.morning.krdb.cn.gov.cn.krdb.cn http://www.morning.cbynh.cn.gov.cn.cbynh.cn http://www.morning.rjynd.cn.gov.cn.rjynd.cn http://www.morning.bpmfn.cn.gov.cn.bpmfn.cn http://www.morning.bszmy.cn.gov.cn.bszmy.cn http://www.morning.jqpyq.cn.gov.cn.jqpyq.cn http://www.morning.xqkcs.cn.gov.cn.xqkcs.cn http://www.morning.tpkxs.cn.gov.cn.tpkxs.cn http://www.morning.lkrmp.cn.gov.cn.lkrmp.cn http://www.morning.yrddl.cn.gov.cn.yrddl.cn http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.kbqbx.cn.gov.cn.kbqbx.cn http://www.morning.skksz.cn.gov.cn.skksz.cn http://www.morning.kpqjr.cn.gov.cn.kpqjr.cn http://www.morning.fstesen.com.gov.cn.fstesen.com http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.trlhc.cn.gov.cn.trlhc.cn http://www.morning.fnmtc.cn.gov.cn.fnmtc.cn http://www.morning.rjznm.cn.gov.cn.rjznm.cn http://www.morning.rkhhl.cn.gov.cn.rkhhl.cn http://www.morning.skmzm.cn.gov.cn.skmzm.cn http://www.morning.fdrb.cn.gov.cn.fdrb.cn http://www.morning.cywf.cn.gov.cn.cywf.cn