opencv的一些功能代码
opencv调用摄像头
#include<opencv2/opencv.hpp>
using namespace cv; void main(){
VideoCapture cap;
cap.open(); //打开摄像头 if (!cap.isOpened())
return; Mat frame;
while ()
{
//cap >> frame;//等价于cap.read(frame);
cap.read(frame);
if (frame.empty())
break;
imshow("video", frame);
if (waitKey()>)//按下任意键退出摄像头 因电脑环境而异,有的电脑可能会出现一闪而过的情况
break;
}
cap.release();
destroyAllWindows();//关闭所有窗口
}
opencv调用测试代码:
#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std; int main()
{
Mat img = imread("cluo.jpg");//图片必须添加到工程目录下
imshow("测试程序", img);
waitKey();
}
opencv中FileStorage的使用:
支持多种数据类型的存储,能够直接存储vector<string>类型的参数,再读入数据的时候,参数的顺序不会变。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv; void WriteFileStorageData(string filename)
{
cv::FileStorage fwrite(filename.c_str(), cv::FileStorage::WRITE);
//2.write data
float fx = ;
fwrite << "fx" << fx; Mat data = Mat::ones(, , CV_32F);
Mat label = Mat::zeros(, , CV_8U);
fwrite << "data" << data;
fwrite << "label" << label; string name = "img/nears.jpg";
fwrite << "name" << name;
//3.close FileStorage
fwrite.release();
cout << "write done!" << endl;
} void ReadFileStorageData(string filename)
{
cv::FileStorage fread(filename.c_str(), cv::FileStorage::READ); if (!fread.isOpened())
{
cout << "Failed to open settings file at: " << filename << endl;
return;
} //3.read data
float fxread;
fread["fx"] >> fxread;
cout << "fxread=" << fxread << endl; Mat data;
Mat label;
fread["data"] >> data;;
fread["label"] >> label;
cout << "data=" << data << endl;
cout << "label=" << label << endl; string name;
fread["name"] >> name;
cout << "name=" << name<< endl;
//close FileStorage
fread.release();
cout << "read success!" << endl;
} int main(int argc, char** argv)
{
string xmlfile = "./setting.xml"; cv::FileStorage fread(xmlfile.c_str(), cv::FileStorage::READ);
//judge the exist of xml file
if (!fread.isOpened())
{
cout << xmlfile << " is not exists!" << endl; cout << "ready to write xml file" << endl;
WriteFileStorageData(xmlfile);
} ReadFileStorageData(xmlfile); system("pause");
return ;
}
打开摄像头,录视频,并存储
int main(int argc,char* argv[])
{
Mat image;
VideoCapture cap;
image = cap.open();
if (!cap.isOpened())
{
cout << "fail to open!" << endl;
return -;
} VideoWriter writer;
int isColor = ;
int frame_fps = ;
int frame_width = ;
int frame_height = ;
//string video_name = "out.avi";
string video_name = "video.avi";
writer = VideoWriter(video_name, CV_FOURCC('X', 'V', 'I', 'D'), frame_fps, Size(frame_width, frame_height), isColor); while ()
{
cap >> image;
if (!image.data)
break;
writer.write(image);
imshow("image", image);
if (waitKey() >= )
break;
}
cap.release();
destroyAllWindows();
return ;
}
遍历Mat
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std; //通过索引方式遍历每个像素值
void color_traverse1(Mat& img)
{
int w = img.cols;
int h = img.rows;
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++)
{
Vec3b bgr = img.at<Vec3b>(i, j);
bgr[0] = 255 - bgr[0];
bgr[1] = 255 - bgr[1];
bgr[2] = 255 - bgr[2];
img.at<Vec3b>(i, j) = bgr;
}
cout << "color_traverse1 is over" << endl;
} //行指针遍历
void color_traverse2(Mat& img)
{
int w = img.cols;
int h = img.rows;
for (int i = 0; i < h; i++)
{
uchar* pData = img.ptr<uchar>(i);
for (int j = 0; j < w; j++)
{
int B = *pData;
*pData++ = 255 - B;
int G = *pData;
*pData++ = 255 - G;
int R = *pData;
*pData++ = 255 - R;
}
}
cout << "color_traverse2 is over" << endl;
} //获取Mat对象的指针
void color_traverse3(Mat& img)
{
int w = img.cols;
int h = img.rows;
uchar* pData = img.data;
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++)
{
int B = *pData;
*pData++ = 255 - B;
int G = *pData;
*pData++ = 255 - G;
int R = *pData;
*pData++ = 255 - R;
}
cout << "color_traverse3 is over" << endl;
} int main()
{
string imgpath = "E:/vs2015_project/Test/img/cluo.jpg";
Mat img = imread(imgpath);
cout << img.rows << " " << img.cols << endl; color_traverse3(img); imshow("img", img);
waitKey(0); system("pause");
return 0;
}
opencv的一些功能代码的更多相关文章
- [转]Android通过NDK调用JNI,使用opencv做本地c++代码开发配置方法
原文地址:http://blog.csdn.net/watkinsong/article/details/9849973 有一种方式不需要自己配置所有的Sun JDK, Android SDK以及ND ...
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
以前写过两个Android开发配置文档,使用NDK进行JNI开发,这样能够利用以前已经写好的C++代码. 前两篇博客地址: http://blog.csdn.net/watkinsong/articl ...
- Python OpenCV的绘图功能简介
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:大Z 在图像中我们经常需要用到将某个局部特征画出来,比如物体检测,物 ...
- 原生JS实现购物车结算功能代码+zepto版
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- 常见.NET功能代码汇总 (2)
常见.NET功能代码汇总 23,获取和设置分级缓存 获取缓存:首先从本地缓存获取,如果没有,再去读取分布式缓存写缓存:同时写本地缓存和分布式缓存 private static T GetGradeCa ...
- 通过javascript库JQuery实现页面跳转功能代码
通过javascript库JQuery实现页面跳转功能代码的四段代码实例如下. 实例1: 1 2 3 4 $(function(){ var pn = $("#gotopagenum&quo ...
- IOS开发-OC学习-常用功能代码片段整理
IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...
- 20个开发人员非常有用的Java功能代码
本文将为大家介绍20个对开发人员非常有用的Java功能代码.这20段代码,可以成为大家在今后的开发过程中,Java编程手册的重要部分. 1. 把Strings转换成int和把int转换成String ...
- OpenCV+OpenCL stereo match 代码
之前配置cuda跟opencv 的混合编程,发现只要使用的东西多半还要用opencv的代码编译一次,加上cuda的编译太浪费时间了,我看了几个博客,觉的opencl这个可能会比较好整,就把opencv ...
随机推荐
- CDI services--Decorators(装饰器)
1.Decorators装饰器综述 拦截器是一种强大的方法在应用程序捕捉运行方法和解耦.拦截器可以拦截任何java类型的调用. 这使得拦截器适合解决事务管理,安全性,以及日记记录. 本质上说,拦截器并 ...
- redis----------基本命令使用
1.查看全部缓存数据的key keys * 2.清空当前redis数据库缓存 flushdb (redis默认由16个库(0~15号). 且默认使用的是0号库.库之间的切换使用select命令例如: ...
- u盘安装centos7.6 最新版本
1,可以按照网上的教程,制作u盘启动 2,然后将u盘插入主机,最重要的是这一步,网上的说法基本上适用这个版本 进入到这个界面: 然后选择Install Centos 7,然后按e键,tab是不管用的 ...
- ASP.NET页面之间传值的方式之Server.Transfer(个人整理)
Server.Transfer 这个方法相比以前介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写 ...
- 用友畅捷通T6数据升级到T+的步骤图解
1.打开升级工具,输入各项目: 2.点击下一步并确认---“是”: 3.输入目的账套信息(主要是系统管理员密码): 4.升级开始: 5.退出原账套登录的确认----“是”: 6.升级进度: 7.升级成 ...
- WEB学习小笔记
环境基于WIN10.IDEA最新版.JDK1.8.TOMCAT9 下面说的有错的地方希望指出,谢谢. STRUT2 1.在maven下的时候系统会系统创建一个叫做log4j的配置文件,但是到了这个版本 ...
- 2017-2018-2 20155228 《网络对抗技术》 实验一:PC平台逆向破解
2017-2018-2 20155228 <网络对抗技术> 实验一:PC平台逆向破解 实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用 ...
- POSIX
API: POSIX (编译前的源代码) ABI: APPLICATION BINARY INTERFACE (编译后的二进制文件,linux & windows不兼容) ---------- ...
- CentOS7上手动部署入门级kubernetes
前言 翻看了很多的kubernetes的安装教程,也反复做了一些实验,深感教程之复杂,所以决定写一个极简版本的安装教程,目标在于用尽可能少的参数启动服务,并且剖析各组件关系,然后再在此基础上逐步添加参 ...
- 爬坑二 activiti流数据库版本错误引发的问题
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'actModelCont ...