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
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
随机推荐
- js 求select option 的值和对应option的内容
<select onChange="aa(this)" name="a"> <option value="a">1& ...
- Java Web(一) 前言及体系结构
Web应用程序 Web程序是什么 Web应用程序就是一般所说的网站,由服务器,客户端浏览器以及网络组成.但Web程序又不是一般意义的网站,一般的网站是提供信息服务,重在内容,程序往往比较简单,但商用的 ...
- react router @4 和 vue路由 详解(一)vue路由基础和使用
完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...
- linux:ssh远程调用tomcat脚本时候出错
我们都知道,使用ssh在另一台机子执行一个ssh文件的语句是酱紫的 ssh root@1.9.7.56 "chmod 777 /opt/script/tomcatStop.sh ; sh / ...
- Python中os与sys模块的区别
os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...
- HanLP自然语言处理包介绍
支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换, ...
- AVL平衡二叉树实现,图解分析,C++描述,完整可执行代码
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 三:使用docker-machine安装虚拟机上的docker
1.docker安装之后自带docker-machine:(需要win10专业版或mac) 2.如何远程管理一个docker-machine?(以下是Mac环境) 关闭本地的docker应用.运行do ...
- CSS--思维导图
CSS--思维导图
- leetcode python 004
## 已知l1,l2均为升序数组,## 在两数组l1,l2中寻找第n位数,## 两数组中位数中,前者大于后者,说明后者中位数以下的成员必定在真正中位数之下## 可以将其剔除,剔除a个元素后的两 ...