opencv函数操作对象的一致性问题
2016-05-05 17:11
330 查看
初衷:
读入一幅图像“woman.jpg”
在图像的红色通道中加入logo,再输出。
logo的文件名为"logo.jpg"
------------------------------------------codes begin----------------------------------------------------
#include <opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
Mat woman = imread("woman.jpg");
Mat logo= imread("logo.jpg");
Mat ROI;
vector<Mat> channels;
Mat womanR;
namedWindow("woman");
imshow("woman",woman);
namedWindow("logo");
imshow("logo",logo);
split(woman, channels);
womanR = channels.at(0);
ROI = womanR(Rect(100, 100, logo.cols,logo.rows));
addWeighted(ROI,0.5,logo,0.5,0.,ROI);
merge(channels,woman);
namedWindow("womanR+logo");
imshow("womanR+logo",woman);
waitKey(0);
return(0);
}//end of main
------------------------------------------codes end-------------------------------------------------------
第一次运行的时候,在函数addWeighted()处报错。
原因:logo.jpg是读入的三通道图像,而ROI此时是woman.jpg的红色通道数据。
修改方法:
将主函数的第二句代码
Mat logo= imread("logo.jpg");
修改成
Mat logo= imread("logo.jpg",0);
第二次运行,结果正确。
几次运用openCV的结论:
opencv对图像的操作,实际是对矩阵数据的操作,和matlab对图像的操作有类似之处。
因此无论是从数据通道(单通道或多通道)还是维数(尺寸)上,两个参与操作的对象要注意一致。
例如code中的两句代码:
ROI = womanR(Rect(100, 100, logo.cols,logo.rows));
addWeighted(ROI,0.5,logo,0.5,0.,ROI);
第一句也是为了得到在woman.jpg红色通道数据中和logo一样尺寸的感兴趣区域变量ROI,否则在addWeighted()函数在执行时也会出错。
读入一幅图像“woman.jpg”
在图像的红色通道中加入logo,再输出。
logo的文件名为"logo.jpg"
------------------------------------------codes begin----------------------------------------------------
#include <opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
Mat woman = imread("woman.jpg");
Mat logo= imread("logo.jpg");
Mat ROI;
vector<Mat> channels;
Mat womanR;
namedWindow("woman");
imshow("woman",woman);
namedWindow("logo");
imshow("logo",logo);
split(woman, channels);
womanR = channels.at(0);
ROI = womanR(Rect(100, 100, logo.cols,logo.rows));
addWeighted(ROI,0.5,logo,0.5,0.,ROI);
merge(channels,woman);
namedWindow("womanR+logo");
imshow("womanR+logo",woman);
waitKey(0);
return(0);
}//end of main
------------------------------------------codes end-------------------------------------------------------
第一次运行的时候,在函数addWeighted()处报错。
原因:logo.jpg是读入的三通道图像,而ROI此时是woman.jpg的红色通道数据。
修改方法:
将主函数的第二句代码
Mat logo= imread("logo.jpg");
修改成
Mat logo= imread("logo.jpg",0);
第二次运行,结果正确。
几次运用openCV的结论:
opencv对图像的操作,实际是对矩阵数据的操作,和matlab对图像的操作有类似之处。
因此无论是从数据通道(单通道或多通道)还是维数(尺寸)上,两个参与操作的对象要注意一致。
例如code中的两句代码:
ROI = womanR(Rect(100, 100, logo.cols,logo.rows));
addWeighted(ROI,0.5,logo,0.5,0.,ROI);
第一句也是为了得到在woman.jpg红色通道数据中和logo一样尺寸的感兴趣区域变量ROI,否则在addWeighted()函数在执行时也会出错。
相关文章推荐
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- 基于C++实现kinect+opencv 获取深度及彩色数据
- OpenCV 2.4.3 C++ 平滑处理分析
- Python中使用OpenCV库来进行简单的气象学遥感影像计算
- 利用Python和OpenCV库将URL转换为OpenCV格式的方法
- python结合opencv实现人脸检测与跟踪
- Python环境搭建之OpenCV的步骤方法
- Python+Opencv识别两张相似图片
- Python实现OpenCV的安装与使用示例
- 在树莓派2或树莓派B+上安装Python和OpenCV的教程
- opencv-python学习一--人脸检测
- 在Ubuntu上安装OpenCV3.0和Python-openCV的经历
- OpenCV配置,从来没有这么简单!
- ubuntu下opencv和qt的安装配置
- Python+Opencv识别两张相似图片
- OpenCV学习笔记(二十五)——OpenCV图形界面设计Qt+VS2008
- 分享一些OpenCV实现立体视觉的经验
- 关于OpenCv图像变换与基本图形检测