OpenCV2计算机视觉应用编程手册(自学版)初级五
来源:互联网 发布:ajax获取前台数据 编辑:程序博客网 时间:2024/06/05 02:49
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;
}
- OpenCV2计算机视觉应用编程手册(自学版)初级五
- OpenCV2计算机视觉应用编程手册(自学版)初级一
- OpenCV2计算机视觉应用编程手册(自学版)初级二
- OpenCV2计算机视觉应用编程手册(自学版)初级三
- OpenCV2计算机视觉应用编程手册(自学版)初级四
- OpenCV2计算机视觉应用编程手册(自学版)初级六
- OpenCV2计算机视觉应用编程手册(自学版)初级七
- OpenCV2计算机视觉编程手册(1)
- OpenCV2计算机视觉编程手册(2)
- OpenCV2计算机视觉编程手册(3)
- opencv2 计算机视觉编程手册 estimateF.cpp
- opencv2 计算机机器视觉编程手册 代码
- 《OpenCV2计算机视觉编程手册》2-5
- opencv2计算机视觉编程手册(中文)pdf
- 《OpenCV2 计算机视觉编程手册》视频处理一
- 《OpenCV2 计算机视觉编程手册》视频处理二
- 《OpenCV2 计算机视觉编程手册》视频处理三
- [OpenCv2 计算机视觉编程手册] 第六章 图像滤波
- 【JS】【客户端】JavaScript程序的执行
- linux+eclipse调试ffmpeg
- USACO 2.2.3 货币系统
- hdoj problem 1241 Oil Deposits(深搜 DFS)
- Git-08_冲突
- OpenCV2计算机视觉应用编程手册(自学版)初级五
- Struts2漏洞分析与研究之Ognl机制探讨
- iOS开发之OC语法基础(四)--内存管理
- 以结点p为根的子树中序线索化
- 人品计算器1.0版本
- 带头结点的中序线索化
- 菜鸟授徒系列之新手入门
- 遍历中序线索二叉树
- USACO 2.2.4 两只塔沃斯母牛