opencv学习记录
#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学习记录的更多相关文章
- OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别 标签: 脸部识别opencv 2017-07-03 21:38 26人阅读
上一篇文章中介绍了如何使用OpenCV自带的haar分类器进行人脸识别(点我打开). 这次我试着自己去训练一个haar分类器,前后花了两天,最后总算是训练完了.不过效果并不是特别理想,由于我是在自己的 ...
- OpenCV学习记录之摄像头调用
关于opencv调用摄像头的问题主要是因为摄像头的打开有延时.在显示图像前,要用if语句判断图像是否存在.(否则会报错) 具体的:教程里的源程序,将if条件句里,break去掉,并增加else语句. ...
- OpenCV学习记录(一):使用haar分类器进行人脸识别 标签: opencv脸部识别c++ 2017-07-03 15:59 26人阅读
OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).OpenCV2之后的C++接口除了Haar特征 ...
- OpenCV学习记录(C++版本)
HighGUI组件 图像的载入:imread()函数 Mat imread(const string& filename, int flag = 1)其中flag=1代表读入RGB彩色图像,- ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
# OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
随机推荐
- Latex 循环插图、文件名包含空格
\,...,} { \begin{figure} \centering \includegraphics[width=10cm]{pictures//rela\n} \caption{Attribut ...
- 公司最近把开发人员的系统全部改为windows了
公司最近把开发人员的开发环境全部改为windows了,唯一linux系统(一位做python 开发的同事自己安装的),被要求下午下班前改为windows 系统,windows 是公认的不适合开发,我家 ...
- DRF的分页
DRF的分页 DRF的分页 为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来, 这样 ...
- SQL-11 获取所有员工当前的manager,如果当前的manager是自己的话结果不显示
题目描述 获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'.结果第一列给出当前员工的emp_no,第二列给出其manag ...
- java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repr ...
- L1-054 福到了
“福”字倒着贴,寓意“福到”.不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出.这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格.而倒过来的汉 ...
- Zabbix4.0添加端口和进程监控
一:Zabbix设置主动模式: vim /etc/zabbix/zabbix_agent.conf Server=192.168.1.10 #被动模式的serverip地址,如果设置纯被动模式,可以注 ...
- W phase 学习
W phase 的组成:(相关文献发现W phase适用于6级以上的地震) P, PP,S,SS,SP,PS等等长周期的震相: 它的传播机制和whispering gallery 相似. 从简振理论来 ...
- L267 How to save money
When it comes to saving money, the struggle is all too real. It's like your bank account and your 20 ...
- TextRank算法
TextRank是一种用来做关键词提取的算法,也可以用于提取短语和自动摘要.因为TextRank是基于PageRank的,所以首先简要介绍下PageRank算法. (1)PageRank PageRa ...