OpenCV2计算机视觉应用编程手册(自学版)初级五
2014-11-30 00:49
501 查看
OpenCV2计算机视觉应用编程手册(自学版)初级五
---图像叠加、图像三个通道的分解和合成、图像ROI区域操作
/*
第五个opencv程序---图像叠加、图像三个通道的分解和合成、图像ROI区域操作
时间:2014年11月30日00:50:14
要叠加的两个图像,必须保证有着相同的大小和相同的数据类型
对单个图像进行操作的运算符包括
sqrt pow abs cuberoot exp log
矩阵加法操作
1--cv::addWeighted(image1,0.7,image2,0.9,0.,result);// 直接调用系统函数
2---result= 0.7*image1+0.9*image2;// +运算符被重载了
对RGB通道数据分别处理
将RGB三通道图像分解成个单通道数据,这样就可以分别对单个通道进行处理
cv::split(image1,planes);// 将个三通道的数据分成个单通道的数据
将三个单通道合并成1个三通道数据
cv::merge(planes,result);//重新将三个通道的图像整成个三通道的图像
ROI--region of interest 感兴趣的区域
ROI 区域声明
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));//前两个是对应添加的ROI的左上角坐标
*/
#include "stdafx.h"
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;// 使用STD
using namespace cv;// 使用名字空间
int main()
{
cv::Mat image1;
cv::Mat image2;
image1= cv::imread("F:\\house.jpg");
image2= cv::imread("F:\\rain.jpg");
if (!image1.data)
return 0;
if (!image2.data)
return 0;
cv::namedWindow("Image 1");
cv::imshow("Image 1",image1);
cv::namedWindow("Image 2");
cv::imshow("Image 2",image2);
cv::Mat result;
cv::addWeighted(image1,0.7,image2,0.9,0.,result);// 直接调用系统函数
cv::namedWindow("result");
cv::imshow("result",result);
// using overloaded operator 使用运算符重载
result= 0.7*image1+0.9*image2;
cv::namedWindow("result with operators");
cv::imshow("result with operators",result);// 运算符重载了
image2= cv::imread("F:\\rain.jpg",0);
// create vector of 3 images
std::vector<cv::Mat> planes;
// split 1 3-channel image into 3 1-channel images
cv::split(image1,planes);// 将个三通道的数据分成个单通道的数据
// add to blue channel
planes[0]+= image2;// 在蓝色通道上面加上rain
// merge the 3 1-channel images into 1 3-channel image
cv::merge(planes,result);//重新将三个通道的图像整成个三通道的图像
cv::namedWindow("Result on blue channel");
cv::imshow("Result on blue channel",result);
// ROI =region of interst
// read images
cv::Mat image= cv::imread("F:\\house.jpg");
cv::Mat logo= cv::imread("F:\\logo.bmp");
// define image ROI
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
// add logo to image
cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);// imageROI区域=imageROI+0.3*logo+0.0
// show result
cv::namedWindow("with logo");
cv::imshow("with logo",image);
// read images
image= cv::imread("F:\\house.jpg");
logo= cv::imread("F\\logo.bmp");
// define ROI
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));// 定义ROI区域
// load the mask (must be gray-level)
cv::Mat mask= cv::imread("F:\\logo.bmp",0);
// copy to ROI with mask
logo.copyTo(imageROI,mask);
// show result
cv::namedWindow("with logo 2");
cv::imshow("with logo 2",image);
// 对三个通道进行处理将LOGO嵌入到某个通道中
// read images
logo= cv::imread("F:\\logo.bmp",0);
image1= cv::imread("F:\\house.jpg");
// split 3-channel image into 3 1-channel images
std::vector<cv::Mat> channels;
cv::split(image1,channels);
imageROI= channels.at(1);
cv::addWeighted(imageROI(cv::Rect(385,270,logo.cols,logo.rows)),1.0,
logo,0.5,0.,imageROI(cv::Rect(385,270,logo.cols,logo.rows)));
cv::merge(channels,image1);
cv::namedWindow("with logo 3");
cv::imshow("with logo 3",image1);
cv::waitKey();
return 0;
}
---图像叠加、图像三个通道的分解和合成、图像ROI区域操作
/*
第五个opencv程序---图像叠加、图像三个通道的分解和合成、图像ROI区域操作
时间:2014年11月30日00:50:14
要叠加的两个图像,必须保证有着相同的大小和相同的数据类型
对单个图像进行操作的运算符包括
sqrt pow abs cuberoot exp log
矩阵加法操作
1--cv::addWeighted(image1,0.7,image2,0.9,0.,result);// 直接调用系统函数
2---result= 0.7*image1+0.9*image2;// +运算符被重载了
对RGB通道数据分别处理
将RGB三通道图像分解成个单通道数据,这样就可以分别对单个通道进行处理
cv::split(image1,planes);// 将个三通道的数据分成个单通道的数据
将三个单通道合并成1个三通道数据
cv::merge(planes,result);//重新将三个通道的图像整成个三通道的图像
ROI--region of interest 感兴趣的区域
ROI 区域声明
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));//前两个是对应添加的ROI的左上角坐标
*/
#include "stdafx.h"
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;// 使用STD
using namespace cv;// 使用名字空间
int main()
{
cv::Mat image1;
cv::Mat image2;
image1= cv::imread("F:\\house.jpg");
image2= cv::imread("F:\\rain.jpg");
if (!image1.data)
return 0;
if (!image2.data)
return 0;
cv::namedWindow("Image 1");
cv::imshow("Image 1",image1);
cv::namedWindow("Image 2");
cv::imshow("Image 2",image2);
cv::Mat result;
cv::addWeighted(image1,0.7,image2,0.9,0.,result);// 直接调用系统函数
cv::namedWindow("result");
cv::imshow("result",result);
// using overloaded operator 使用运算符重载
result= 0.7*image1+0.9*image2;
cv::namedWindow("result with operators");
cv::imshow("result with operators",result);// 运算符重载了
image2= cv::imread("F:\\rain.jpg",0);
// create vector of 3 images
std::vector<cv::Mat> planes;
// split 1 3-channel image into 3 1-channel images
cv::split(image1,planes);// 将个三通道的数据分成个单通道的数据
// add to blue channel
planes[0]+= image2;// 在蓝色通道上面加上rain
// merge the 3 1-channel images into 1 3-channel image
cv::merge(planes,result);//重新将三个通道的图像整成个三通道的图像
cv::namedWindow("Result on blue channel");
cv::imshow("Result on blue channel",result);
// ROI =region of interst
// read images
cv::Mat image= cv::imread("F:\\house.jpg");
cv::Mat logo= cv::imread("F:\\logo.bmp");
// define image ROI
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
// add logo to image
cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);// imageROI区域=imageROI+0.3*logo+0.0
// show result
cv::namedWindow("with logo");
cv::imshow("with logo",image);
// read images
image= cv::imread("F:\\house.jpg");
logo= cv::imread("F\\logo.bmp");
// define ROI
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));// 定义ROI区域
// load the mask (must be gray-level)
cv::Mat mask= cv::imread("F:\\logo.bmp",0);
// copy to ROI with mask
logo.copyTo(imageROI,mask);
// show result
cv::namedWindow("with logo 2");
cv::imshow("with logo 2",image);
// 对三个通道进行处理将LOGO嵌入到某个通道中
// read images
logo= cv::imread("F:\\logo.bmp",0);
image1= cv::imread("F:\\house.jpg");
// split 3-channel image into 3 1-channel images
std::vector<cv::Mat> channels;
cv::split(image1,channels);
imageROI= channels.at(1);
cv::addWeighted(imageROI(cv::Rect(385,270,logo.cols,logo.rows)),1.0,
logo,0.5,0.,imageROI(cv::Rect(385,270,logo.cols,logo.rows)));
cv::merge(channels,image1);
cv::namedWindow("with logo 3");
cv::imshow("with logo 3",image1);
cv::waitKey();
return 0;
}
相关文章推荐
- OpenCV2计算机视觉应用编程手册(自学版)初级七
- OpenCV2计算机视觉应用编程手册(自学版)初级三
- OpenCV2计算机视觉应用编程手册(自学版)初级四
- OpenCV2计算机视觉应用编程手册(自学版)初级六
- OpenCV2计算机视觉应用编程手册(自学版)初级二
- OpenCV2计算机视觉应用编程手册(自学版)初级一
- 学习《OpenCV 2 计算机视觉编程手册》第二章---使用指针遍历图像案例
- 学习《OpenCV 2 计算机视觉编程手册》第二章存取像素值案例--椒盐噪声
- 《Opencv 2计算机视觉编程手册 》学习笔记 1
- 学习《OpenCV 2 计算机视觉编程手册》第二章遍历图像和领域操作实例——对图像进行锐化
- 《OpenCV2 计算机视觉编程手册》视频处理三
- opencv2 计算机视觉编程手册 estimateF.cpp
- [OpenCv2 计算机视觉编程手册] 第六章 图像滤波
- OpenCV计算机视觉编程Python版
- OpenCV2计算机编程手册(二)基于类的图像处理
- OpenCV2计算机编程手册(一)操作像素
- 《OpenCV2 计算机视觉编程手册》视频处理一
- 计算机视觉——OpenCV中的SIFT(应用)
- 《OpenCV2 计算机视觉编程手册》视频处理二
- cv::Exception at memory location 0x0040F0D4 opencv计算机视觉编程手册第九章