#include<iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
 Mat img4 = imread("LinuxLogo.jpg");
2 // 创建画"窗口
namedWindow("");
// 在窗口中显示游戏原画
imshow("", img4);
// 等待6000 ms后窗口自动关闭
waitKey();

ROI : region of interest

嵌入(覆盖图像),mask法

     Mat console = imread("console.jpg"); //载入图像到Mat
Mat sight1 = imread("sight1.jpg");
namedWindow("sight1.jpg");
namedWindow("控制台");
imshow("控制台",console);
imshow("sight1.jpg",sight1); //设定区域
Mat ROI = console(Rect(,,sight1.cols,sight1.rows)); //读入mask
Mat mask = imread("sight1.jpg"); //将目标拷贝到ROI
sight1.copyTo(ROI,mask); //显示
namedWindow("add");
imshow("add",console); waitKey();
return ;

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow

图片路径问题

     //【0】定义一些局部变量
double alphaValue = 0.5;
double betaValue;
Mat srcImage2,srcImage3, dstImage; //【1】读取图像 ( 两幅图片需为同样的类型和尺寸 )
srcImage2 = imread("moon.jpg");
srcImage3 = imread("road.jpg"); if (!srcImage2.data) { printf("读取srcImage2错误~! \n"); return false; }
if (!srcImage3.data) { printf("读取srcImage3错误~! \n"); return false; } //【2】做图像混合加权操作
betaValue = (1.0 - alphaValue);
addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage); //【3】创建并显示原图窗口
namedWindow("原图 by 强哥");
imshow("原图 by 强哥", srcImage2); namedWindow("线性混合图 by强哥");
imshow("线性混合图 by强哥", dstImage);
waitKey(); return ;
 void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-);  

dst = src1[I]*alpha+ src2[I]*beta + gamma;

src1与src2的通道数需要相同,否则会出现以下问题

 OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array') in arithm_op
        split(srcImage,channels);//分离色彩通道

        //【3】将原图的红色通道引用返回给imageBlueChannel,注意是引用,相当于两者等价,修改其中一个另一个跟着变
imageBlueChannel=channels.at(); //【4】将原图的蓝色通道的(500,250)坐标处右下方的一块区域和logo图进行加权操作,将得到的混合结果存到imageBlueChannel中
addWeighted(imageBlueChannel(Range(, + logoImage.rows),Range(, + logoImage.cols)),0.9, logoImage,0.5,,imageBlueChannel(Range(, + logoImage.rows),Range(, + logoImage.cols)));

codeblock乱码问题解决

图像的深度,位深

线性滤波:方框滤波,均值滤波,高斯滤波

非线性滤波:中值滤波,双边滤波

均值滤波:不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。特殊的boxfilter

 #include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp> using namespace std;
using namespace cv; Mat g_src,g_dst1,g_dst2,g_dst3,g_dst4,g_dst5;
int g_box_core = ;
int g_blur_core = ;
int g_gau_core = ;
int g_median_core = ;
int g_bila_core = ; static void on_box(int,void*);
static void on_blur(int,void*);
static void on_gau(int,void*);
static void on_median(int,void*);
static void on_bila(int,void*); int main()
{
//读原图
g_src = imread("pool.jpg"); //克隆三个图到dest
g_dst1 = g_src.clone();
g_dst2 = g_src.clone();
g_dst3 = g_src.clone();
g_dst4 = g_src.clone();
g_dst5 = g_src.clone(); namedWindow("原图");
imshow("原图",g_src); //boxFiter
namedWindow("box");
createTrackbar("core","box",&g_box_core,,on_box);
on_box(g_box_core,);
// imshow("box",g_dst1); //blur
namedWindow("blur");
createTrackbar("core","blur",&g_blur_core,,on_blur);
on_blur(g_blur_core,);
// imshow("blur",g_dst2); //GaussionBlur
namedWindow("gau");
createTrackbar("core","gau",&g_gau_core,,on_gau);
on_gau(g_gau_core,);
// imshow("gau",g_dst3); namedWindow("median");
createTrackbar("core","median",&g_median_core,,on_median);
on_median(g_median_core,); namedWindow("bila");
createTrackbar("core","bila",&g_bila_core,,on_bila);
on_bila(g_bila_core,);
// imshow("bila",g_dst5); waitKey();
return ;
} static void on_box(int,void*)
{
//trackbar最小值为1,此处保证模板存在
boxFilter(g_src,g_dst1,-,Size(g_box_core + ,g_box_core + )); imshow("box",g_dst1);
} static void on_blur(int,void*)
{ blur(g_src,g_dst2,Size(g_blur_core + ,g_blur_core + )); imshow("blur",g_dst2);
} static void on_gau(int,void*)
{
//参数必须为奇数
GaussianBlur(g_src,g_dst3,Size(g_gau_core * + ,g_gau_core * + ),,); imshow("gau",g_dst3);
} static void on_median(int,void*)
{
medianBlur(g_src,g_dst4,g_median_core * + ); imshow("median",g_dst4);
} static void on_bila(int,void*)
{
bilateralFilter(g_src,g_dst5,g_bila_core,g_bila_core*,g_bila_core/); imshow("blia",g_dst5);
}
     Mat srcImage;
g_srcImage.copyTo(srcImage);
int resultImage_cols = g_srcImage.cols - g_tempalteImage.cols + ;      //需要处理参数
int resultImage_rows = g_srcImage.rows - g_tempalteImage.rows + ;      //需要处理参数
g_resultImage.create(resultImage_cols, resultImage_rows, CV_32FC1); matchTemplate(g_srcImage, g_tempalteImage, g_resultImage, g_nMatchMethod);  //注意参数
normalize(g_resultImage, g_resultImage, , , NORM_MINMAX, -, Mat());
double minValue, maxValue;
Point minLocation, maxLocation, matchLocation;
minMaxLoc(g_resultImage, &minValue, &maxValue, &minLocation, &maxLocation); if (g_nMatchMethod == TM_SQDIFF || g_nMatchMethod == CV_TM_SQDIFF_NORMED) //寻找匹配点
{
matchLocation = minLocation;
}
else
{
matchLocation = maxLocation;
} rectangle(srcImage, matchLocation, Point(matchLocation.x + g_tempalteImage.cols, matchLocation.y + g_tempalteImage.rows), Scalar(, , ), , , );
rectangle(g_resultImage, matchLocation, Point(matchLocation.x + g_tempalteImage.cols, matchLocation.y + g_tempalteImage.rows), Scalar(, , ), , , ); imshow("原始图", srcImage);
imshow("效果图", g_resultImage);

opencv学习记录的更多相关文章

  1. OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别 标签: 脸部识别opencv 2017-07-03 21:38 26人阅读

    上一篇文章中介绍了如何使用OpenCV自带的haar分类器进行人脸识别(点我打开). 这次我试着自己去训练一个haar分类器,前后花了两天,最后总算是训练完了.不过效果并不是特别理想,由于我是在自己的 ...

  2. OpenCV学习记录之摄像头调用

    关于opencv调用摄像头的问题主要是因为摄像头的打开有延时.在显示图像前,要用if语句判断图像是否存在.(否则会报错) 具体的:教程里的源程序,将if条件句里,break去掉,并增加else语句. ...

  3. OpenCV学习记录(一):使用haar分类器进行人脸识别 标签: opencv脸部识别c++ 2017-07-03 15:59 26人阅读

    OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).OpenCV2之后的C++接口除了Haar特征 ...

  4. OpenCV学习记录(C++版本)

    HighGUI组件 图像的载入:imread()函数 Mat imread(const string& filename, int flag = 1)其中flag=1代表读入RGB彩色图像,- ...

  5. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  6. OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现

    # OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...

  7. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  8. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  9. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

随机推荐

  1. 解决eclipse/myeclipse导入项目时出现红色叹号的方法

  2. javascript 字符串函数

    字符串的截取 str.substring(0,index) 字符串转换为日期 <script> var s = "2017-04-10"; var d = s.repl ...

  3. asp.net 发送电子邮件本地测试正常,但服务器上异常的解决办法

    如题,这个问题曾经非常苦恼,代码肯定是没有问题的.在网上也查找了不少资料,按照他们的步骤做了,还是无效. 最后问题解决了,原来:我租用腾讯云服务器,腾讯为了防止垃圾邮件,禁止了邮件发送的25号端口,原 ...

  4. day19-python的正则表达式2

    正则对象的findall方法 findall(string[, pos[, endpos]])  搜索string,以列表形式返回全部能匹配的子串. import re p1 = re.compile ...

  5. Oracle shrink space

    一.开启表的行迁移 alter table table_name enable row movement; select 'alter table '||s.owner||'.'||s.table_n ...

  6. Java基础复习

    java语言的一个核心:jdk, java development kits---面向开发人员jre, java Runtime Environment---服务器上 java虚拟机---(以字节码为 ...

  7. Problem B 一元二次方程类

    Description 定义一个表示一元二次方程的类Equation,该类至少具有以下3个数据成员:a.b和c,用于表示方程“a*x*x + b*x +c = 0”.同时,该类还至少具有以下两个成员函 ...

  8. Linux文件系统命令 lsof

    命令名:lsof 功能:查看某个端口被占用情况,在配置服务器端口的时候,为了避免冲突,可以通过这个命令查看将要被使用的端口是否被占用. 用法:加-i 参数 eg: renjg@renjg-HP-Com ...

  9. leetcode第11题:盛水最多的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  10. 关于 数据库 my_slq的 安装及其卸载

    安装的时候 注意事项 自定后 根据电脑的系统版本 选择32  或者64  然后选择→方向键 密码默认是123456  或者  123123 查看装的数据库是否安装好了 如何完全卸载 mysql 数据库 ...