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
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
随机推荐
- MySql查询最近一个月,一周,一天
最近一个月 SELECT * FROM table WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(time); 本月.当前月 SELEC ...
- China’s movie heroes 《红海行动》展现中国英雄本色
Recent years have seen a trend for big military movies. Whether it was last year’s British hit Dunki ...
- MakeFile中export的使用
在shell中,可以使用export修改当前进程的环境变量. 例如:export PATH=.:$PATH 将当前路径加入可执行文件查找路径(PATH)中,这样你就不要敲“./excutable” 来 ...
- laravel中的登录页面逻辑
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades ...
- java基础巩固之java实现文件上传
对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具com ...
- mvc+struct1+struct2
转一篇写得很棒的文章:https://my.oschina.net/win199176/blog/208171?p=7&temp=1495894148424 1.基于web开发中最原始的jsp ...
- Map集合遍历的四种方式理解和简单使用-----不能for循环遍历
Map集合遍历的四种方式理解和简单使用 ~Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值 1:无非就是通过map.keySet()获取到值,然后 ...
- Android : iperf-2.0.4 网络测试工具
一.源码下载及交叉编译: 下载:https://pan.baidu.com/s/1i6NYDF3 //包含linux和windows上的可执行文件 1. 解压后获得perf-2.0.4源码.2. ...
- bootstrap 下拉选中查询
<div class="form-group"> <label class="col-lg-3 col-sm-2 control-label" ...
- POJ - 3252 A - Round Numbers
The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' ...