opencv初体验
http://guoming.me/opencv-config 这篇文章有讲解opencv的安装与配置
一些常用库
opencv_core249d.lib
opencv_imgproc249d.lib
opencv_highgui249d.lib
opencv_ml249d.lib
opencv_video249d.lib
opencv_features2d249d.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_legacy249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
一个测试程序
<strong>#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream> using namespace cv;
using namespace std; </strong>int main()
{
Mat image;
image = imread("D:\\lenargb.jpg", -1); // Read the file if (!image.data) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl;
return -1;
} namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
imshow("Display window", image); // Show our image inside it. waitKey(0); // Wait for a keystroke in the window
return 0;
}
Mat 类的一些属性
//矩阵的维数,取值应该大于或等于 2 int dims; //矩阵的行数和列数,如果矩阵超过 2 维,这两个变量的值都为-1 int rows, cols; //指向数据的指针 uchar* data;<strong>
</strong>
Mat 构造方法
Mat M(3,2, CV_8UC3, Scalar(0,0,255)); cout << "M = " << endl << " " << M << endl;<strong>
</strong>
第一行代码创建一个行数(高度)为 3,列数(宽度)为 2 的图像,图像元素是 8 位无符号整数类型,且有三个通道。图像的所有像素值被初始化为(0, 0,255)。由于 OpenCV 中默认的颜色顺序为 BGR,因此这是一个全红色的图像。
第二行代码是输出 Mat 类的实例 M 的所有像素值。 Mat 重定义了<<操作符,使用这个操作符,可以方便地输出所有像素值,而不需要使用 for 循环逐个像素输出
opencv中图像的通道数
基本上,描述一个像素点,如果是灰度,那么只需要一个数值来描述它,就是单通道。
如果一个像素点,有RGB三种颜色来描述它,就是三通道
windows的bmp有时候是一个四通道图像,R、G、B加上一个A通道,表示透明度。
最后这个,一般叫做alpha通道,表示透明度的。
初学只要知道单通道和三通道就好;
创建图像对象
Mat常用的构造函数:
Mat(int rows,int cols,int type,const scalar &s);
其中 rows 表示行数,cols表示列数,两者可以结合为Size size;
Type 可以是 CV_8UC1, CV_16SC1, …,CV_64FC4 等。里面的 8U 表示 8 位无符号整数,16S 表示 16 位有符号整数,64F表示 64 位浮点数(即 double 类型);C 后面的数表示通道数,例如 C1 表示一个通道的图像,C4 表示 4 个通道的图像,以此类推。
如果你需要更多的通道数,需要用宏 CV_8UC(n),例如:Mat M(3,2, CV_8UC(5));//创建行数为 3,列数为 2,通道数为 5 的图像
Scalar 可以设置通道里的像素值;可有可无。可以使用 Mat 类的 create()函数创建图像。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream> using namespace cv;
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
Mat img(3, 2, CV_8UC3, Scalar(100, 100, 200));
cout << "M=" << endl << " " << img << endl;
img.create(3, 2, CV_8UC1);
cout << "M=" << endl <<" "<< img << endl; //imshow("嘿嘿", img);
//waitKey();
system("pause");
return 0;
}
遍历像素
(1) at()函数 是个模版函数;需要指明元素类型
#include <time.h>
#include <iostream>
#include "opencv2/opencv.hpp"
//一般用这个头文件就可以,只不过可能会把大部分用不到的头文件引入进来;
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
srand(time(NULL));
Mat grayim(600, 800, CV_8UC1);//600*800的灰度图;
Mat colorim(600, 800, CV_8UC3);//600*800的彩色图;
//遍历所有像素,并设置像素值;
for (int i = 0; i < grayim.rows; ++i)//Mat的rows和cols属性是public的;
for (int j = 0; j < grayim.cols; ++j)
grayim.at<uchar>(i, j) = (i + j) % 255;
//遍历所有像素,并设置像素值;
for (int i = 0; i < colorim.rows; ++i)
for (int j = 0; j < colorim.cols; ++j)
{
Vec3b pixel;//
pixel[0] = i % 255; //Blue
pixel[1] = j % 255; //Green
pixel[2] = 0; //Red
colorim.at<Vec3b>(i, j) = pixel;
}
//显示结果
imshow("grayim", grayim);
imshow("colorim", colorim); waitKey(0);
return 0;
}
OpenCV 中有模板类 Vec,可以表示一个向量,用来表示彩色图像的一个像素;例如 8U 类型的 RGB 彩色图像可以使用 Vec3b,3 通道 float 类型的矩阵可以使用 Vec3f
Vec3b color; //用 color 变量描述一种 RGB 颜色 color[0]=255; //B 分量 color[1]=0; //G 分量 color[2]=0; //R 分量
2) 使用STL库里的迭代器,
<span style="font-size:14px;">#include <time.h>
#include <iostream>
#include "opencv2/opencv.hpp"
//一般用这个头文件就可以,只不过可能会把大部分用不到的头文件引入进来;
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
srand(time(NULL));
Mat grayim(600, 800, CV_8UC1);//600*800的灰度图;
Mat colorim(600, 800, CV_8UC3);//600*800的彩色图;
//遍历所有像素,并设置像素值;
MatIterator_<uchar> graim_it, graim_end;
MatIterator_<Vec3b> color_it, color_end;
for (graim_it=grayim.begin<uchar>(),graim_end=grayim.end<uchar>(); graim_it!=graim_end; ++graim_it)
{
*graim_it = rand() % 255;
}
for (color_it = colorim.begin<Vec3b>(), color_end = colorim.end<Vec3b>(); color_it != color_end; color_it++)
{
(*color_it)[0] = rand() % 255;
(*color_it)[1] = rand() % 255;
(*color_it)[2] = 0; }
//显示结果
imshow("grayim", grayim);
imshow("colorim", colorim);
waitKey(0);
return 0;
}</span>
如果想看全部内容 请移步我的博客园 http://www.cnblogs.com/dragonfive/p/4480224.html
opencv初体验的更多相关文章
- Swift与C++混编 OpenCV初体验 图片打码~
OpenCV初体验,给图片打码 提到OpenCV,相信大多数人都听说过,应用领域非常广泛,使用C++开发,天生具有跨平台的优势,我们学习一次,就可以在各个平台使用,这个还是很具有诱惑力的.本文主要记录 ...
- OpenCV 初体验
个人博客原文链接 个人掘金链接 本文简单地介绍计算机图形处理的一些基本概念,以及一些有趣的例子和对应的Open CV的代码操作. 顺便说一句,恭喜IG夺冠! 一.图片存储原理 1.颜色空间RGB (1 ...
- 痞子衡嵌入式:走进二维码(QR Code)的世界(2)- 初体验(PyQt5.11+MyQR2.3+ZXing+OpenCV4.2.0)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是走进二维码(QR Code)的世界专题之初体验. 接上篇 <走进二维码(QR Code)的世界(1)- 引言> 继续更文,在 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
随机推荐
- 【Android Api 翻译4】android api 完整翻译之Contacts Provider (学习安卓必知的api,中英文对照)
Contacts Provider 电话簿(注:联系人,联络人.通信录)提供者 ------------------------------- QUICKVIEW 快速概览 * Android's r ...
- leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)
题目: Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would t ...
- Java学习笔记——单例设计模式Singleton
单例设计模式:singleton 解决的问题: 确保程序在运行过程中,某个类的实例instance只有一份. 特点: 1 构造函数私有化 2 自己内部声明自己 3 提供一个public方法,负责实例化 ...
- Oracle基础(九) Oracle的体系结构
一.Oracle体系结构概述: Oracle的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制.要了解Oracle数据库的体系结构,必须理解Oracle系统的重要概念和主要 ...
- ps怎么给文字描边
在设计的时候,单一的文字,往往对人没有多少的吸引力,这就需要我们在文字上加一些文字特效,比如说外发光,描边,投影,等等.在这里我们详细的介绍一下文字的输入,和文字描边的怎么增加,删除的经验.(这些方法 ...
- xe5 android tts(Text To Speech)
xe5 android tts(Text To Speech) TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转 ...
- Mybatis源码解析(一)(2015年06月11日)
一.简介 先看看Mybatis的源码结构图,Mybatis3.2.7版本包含的包共计19个,其他版本可能会少. 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为 ...
- 联系电话正则表达式(jquery表单验证)
一.实现的效果图: 二.CSS样式 /*验证样式*/ .onError{ vertical-align: middle; color: #ff0000; line-height: 22px; padd ...
- shell常用代码积累
1.使用getopts从命令行接收参数 例: while getopts h:u:p: OPTION do case $OPTION in h) echo "主机地址:$OPTARG&quo ...
- c#中SqlHelper类的编写(三)
下面我们直接用可变长度参数的方式写一个完整的SqlHelper增删改public static int ExecuteNonQuery(string sql,params Parameter[] pa ...