OpenCV3编程入门笔记(2)计时函数、感兴趣区域RIO、分离/混合通道
2016-07-11 22:09
369 查看
11 绘制直线的line函数 DrawLine(Mat img, Pont start, Point end);
绘制椭圆的ellipse函数 DrawEllipse(Mat img, double angle) 其中angle为椭圆旋转角度
绘制矩形的rectangle函数 DrawRectangle
绘制原的circle函数 DrawFilledCircle(Mat img, Point center)
绘制填充的多边形的fillpoly函数 DrawPolygon(Mat img)
12 计时函数 getTickCount和getTickFrequency
getTickCount表示CPU自某个事件以来走过的时钟周期数
getTickFrequency表示一秒钟所走的时钟周期数
double time0 = static_cast<double>(getTickCount());记录起始时间
time0 = ((double)getTickCount()-time0)/getTickFrequency(); 得出运行时间
13 感兴趣区域:RIO
也就是从图像中选择的一个图像区域,这个区域是图像分析所关注的重点,有两个方法:
使用矩形区域Rect,指定矩形的左上角坐标和矩形的长度和宽度:
Mat imageRIO = image(Rect(100,200,logo.cols,logo.rows));
指定感兴趣行或列的范围(Range),Range是指从起始索引到终止索引的一连段连续序列:
imageRIO = image(Range(100,100+logo.rows),Range(200,200+logo.cols));
例子:(其中logoImage.copyTo是将mask内容复制到imageRIO1中,相似函数addWeight());
#include "stdafx.h"
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage = imread("C:/Users/Administrator/Pictures/timg.jpg");
Mat dstImage;
int rowNumber = srcImage.rows;
int colNumber = srcImage.cols;
Mat imageRIO = srcImage(Rect(100,200,150,350));
imshow("3",imageRIO);
imwrite("图3.jpg",imageRIO);
//waitKey(100);
cvtColor(srcImage,dstImage,CV_BGR2GRAY);
imwrite("图1.jpg",srcImage);
Mat logoImage = imread("图3.jpg");
if (!logoImage.data)
{
printf("读取图片失败\n");
return false;
}
Mat imageRIO1 = srcImage(Rect(100,200,imageRIO.rows,imageRIO.cols));
Mat mask = imread("图1.jpg");
logoImage.copyTo(imageRIO1,mask);
imshow("1",srcImage);
imshow("2",dstImage);
waitKey(0);
return 0;
}
14 分离颜色通道 split 多通道混合 merge
split(srcImage,channels);// 通道分离
imageBlueChannel = channels.at(0);
imageGreenChannel= channels.at(1);
imageGreChannel = channels.at(2);
merge(channels,mergeImage);//混合图像
绘制椭圆的ellipse函数 DrawEllipse(Mat img, double angle) 其中angle为椭圆旋转角度
绘制矩形的rectangle函数 DrawRectangle
绘制原的circle函数 DrawFilledCircle(Mat img, Point center)
绘制填充的多边形的fillpoly函数 DrawPolygon(Mat img)
12 计时函数 getTickCount和getTickFrequency
getTickCount表示CPU自某个事件以来走过的时钟周期数
getTickFrequency表示一秒钟所走的时钟周期数
double time0 = static_cast<double>(getTickCount());记录起始时间
time0 = ((double)getTickCount()-time0)/getTickFrequency(); 得出运行时间
13 感兴趣区域:RIO
也就是从图像中选择的一个图像区域,这个区域是图像分析所关注的重点,有两个方法:
使用矩形区域Rect,指定矩形的左上角坐标和矩形的长度和宽度:
Mat imageRIO = image(Rect(100,200,logo.cols,logo.rows));
指定感兴趣行或列的范围(Range),Range是指从起始索引到终止索引的一连段连续序列:
imageRIO = image(Range(100,100+logo.rows),Range(200,200+logo.cols));
例子:(其中logoImage.copyTo是将mask内容复制到imageRIO1中,相似函数addWeight());
#include "stdafx.h"
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage = imread("C:/Users/Administrator/Pictures/timg.jpg");
Mat dstImage;
int rowNumber = srcImage.rows;
int colNumber = srcImage.cols;
Mat imageRIO = srcImage(Rect(100,200,150,350));
imshow("3",imageRIO);
imwrite("图3.jpg",imageRIO);
//waitKey(100);
cvtColor(srcImage,dstImage,CV_BGR2GRAY);
imwrite("图1.jpg",srcImage);
Mat logoImage = imread("图3.jpg");
if (!logoImage.data)
{
printf("读取图片失败\n");
return false;
}
Mat imageRIO1 = srcImage(Rect(100,200,imageRIO.rows,imageRIO.cols));
Mat mask = imread("图1.jpg");
logoImage.copyTo(imageRIO1,mask);
imshow("1",srcImage);
imshow("2",dstImage);
waitKey(0);
return 0;
}
14 分离颜色通道 split 多通道混合 merge
split(srcImage,channels);// 通道分离
imageBlueChannel = channels.at(0);
imageGreenChannel= channels.at(1);
imageGreChannel = channels.at(2);
merge(channels,mergeImage);//混合图像
相关文章推荐
- 《机器学习实战》第5章逻辑回归算法的C++实现方式
- 算法之 排序算法 (三) Java
- Java去除字符串中的空格
- Java - 线程状态
- Qt 学习之路 2笔记2
- c++代码习惯
- 初步了解c++的文件输入输出
- 大话设计模式———c++反射机制实现
- Service的启动
- [c/c++]指针(2)
- windows编程之动态链接库的使用
- java基础
- Spring配置项<context:annotation-config/>解释说明
- [01]tensorflow跑示例代码
- Java异常体系结构
- 经典算法1---相似度--模糊查询,查抄袭,语言识别
- HDU-2069-Coin Change
- 5、异常与调试
- [Reprint] C++函数模板与类模板实例解析
- 提高项目30.6-删除字符串前面的空格