OpenCV3编程入门笔记(6)自我验证各函数程序代码
// asw.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std; int main()
{
Mat srcImage = imread("C:/Users/Administrator/Desktop/车牌识别/车牌图像库/1.jpg");
//DrawEllipse(img,(10,20),(30,20),0,360,2,8);
Mat dstImage;
imshow("原图",srcImage);
int rowNumber = srcImage.rows;
int colNumber = srcImage.cols;
Mat imageRIO = srcImage(Rect(,,,));
//imshow("3",imageRIO);
imwrite("图3.jpg",imageRIO);
Mat imgGray;
cvtColor(srcImage,dstImage,CV_BGR2GRAY);
imshow("灰度图.jpg",dstImage);
imgGray = dstImage; //边缘检测 Sobel Laplacian Canny 其中Canny算子只能处理(8位)灰度图,其余两种8位32位都可以
Mat grad_x,grad_y;
Sobel(imgGray,grad_x,CV_8U,,,,,);//X方向上的Sobel算子检测,其中3,1,0都是默认值
imshow("Sobel算子X方向检测图",grad_x);
Sobel(imgGray,grad_y,CV_8U,,,,,);//Y方向上的Sobel算子检测,其中3,1,0都是默认值
imshow("Sobel算子Y方向检测图",grad_y); addWeighted(grad_x,0.5,grad_y,0.5,,dstImage);//合并梯度
imshow("整体方向Sobel图",dstImage); Laplacian(imgGray,dstImage,CV_8U);
imshow("laplacian算子检测图",dstImage); Canny(imgGray,dstImage,,,);//50和200表示第一个滞后性阈值和第二个滞后性阈值,较小者用于边缘连接,较大者控制强边缘的初始段,达阈值opnecv推荐为小阈值的3倍;
//3表示应用的Sobel算子的孔径大小 有默认值为3;
imshow("Caany算子检测图",dstImage);
//waitKey(0); // 霍夫变换 hough
vector<Vec2f> lines;//定义一个矢量结构lines用于存放得到的线段矢量集合
HoughLines(dstImage,lines,,CV_PI/,);
//依次在图中绘制出每条线段
for (size_t i = ;i < lines.size();i++)
{
float rho = lines[i][],theta = lines[i][];
Point pt1,pt2;
double a = cos(theta),b = sin(theta);
double x0 = rho*a,y0 = rho*b;//A是与直线垂直的线交点 坐标为(x0,y0)=(rho*cos(theta),rho*sin(theta));
//向上取整函数cvCeil、向下取整函数cvFloor、四舍五入函数cvRound; pt1.x = cvRound(x0+*(-b));//1000是取两点之间的距离,可操控量;
pt1.y = cvRound(y0+*(a));//pt1是位于A较上的一个点;
pt2.x = cvRound(x0-*(-b));//pt2是位于A较下的一个点;
pt2.y = cvRound(y0-*(a)); line(dstImage,pt1,pt2,Scalar(,,),,CV_AA);
}
imshow("hough检测直线图",dstImage);
//waitKey(0); // 寻找轮廓 只处理8位 即灰度图像
vector<vector<Point>> contours;
findContours(imgGray,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
drawContours(dstImage,contours,-,Scalar(),);
imshow("轮廓图",dstImage);
waitKey(); //阈值化操作
threshold(srcImage,dstImage,,,);
imshow("固定阈值化图像",dstImage);
adaptiveThreshold(imgGray,dstImage,,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,,);
imshow("自适应阈值化图像",dstImage);
waitKey(); // resize函数实现
resize(srcImage,dstImage,Size(),0.5,0.5);//缩小为一半
imshow("缩放1/2图",dstImage);
resize(srcImage,dstImage,Size(),,);//放大2倍
imshow("放大2倍图",dstImage);
resize(srcImage,dstImage,Size(srcImage.cols*,srcImage.rows*));//放大3倍
imshow("放大3倍图",dstImage);
//waitKey(0); // 金字塔函数实现
pyrUp(srcImage,dstImage,Size(srcImage.cols*,srcImage.rows*));// 放大2倍
imshow("金字塔放大2倍图",dstImage);
pyrDown(srcImage,dstImage,Size(srcImage.cols/,srcImage.rows/));// 缩小2倍
imshow("金字塔缩小2倍图",dstImage);
waitKey(); //漫水填充算法
Rect ccomp;
floodFill(srcImage,Point(,),Scalar(,,),&ccomp,Scalar(,,),Scalar(,,));
imshow("漫水填充图",srcImage); //膨胀腐蚀
Mat element = getStructuringElement(MORPH_RECT,Size(,));
erode(srcImage,dstImage,element);
imshow("腐蚀图",dstImage);
dilate(srcImage,dstImage,element);
imshow("膨胀图",dstImage);
waitKey(); //滤波
boxFilter(srcImage,dstImage,-,Size(,));
imshow("方框滤波图",dstImage); blur(srcImage,dstImage,Size(,));
imshow("均值滤波图",dstImage); GaussianBlur(srcImage,dstImage,Size(,),,);
imshow("高斯滤波图",dstImage);
waitKey();
cvtColor(srcImage,dstImage,CV_BGR2GRAY);
imwrite("图1.jpg",srcImage);
Mat logoImage = imread("图3.jpg");
if (!logoImage.data)
{
printf("读取图片失败 \n");
return false;
}
//定义一个Mat类型并给其设定RIO区域
Mat imageRIO1 = srcImage(Rect(,,imageRIO.rows,imageRIO.cols));
Mat mask = imread("原图.jpg");
logoImage.copyTo(imageRIO1,mask);
imshow("",srcImage);
imshow("",dstImage);
waitKey();
return ;
}
OpenCV3编程入门笔记(6)自我验证各函数程序代码的更多相关文章
- OpenCV3编程入门笔记(2)计时函数、感兴趣区域RIO、分离/混合通道
11 绘制直线的line函数 DrawLine(Mat img, Pont start, Point end); 绘制椭圆的ellipse函数 DrawEllipse(Mat img, dou ...
- OpenCV3编程入门笔记(1)图像载入、显示、保存、变换灰度图
图像载入.显示.保存函数: 1 图像载入函数:imread() Mat imread(const string& filename, int flags=1); const ...
- OpenCV3编程入门笔记(5)重要章节小节及核心函数
- OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换
腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...
- OpenCV3编程入门笔记(3)线性滤波、非线性滤波、图像深度、通道
15 遍历图像中的像素,是先for行数后for列数的,也就是一列一列的遍历,matlab中是从1开始计数,opnecv中采用c语言的从0开始计数. 矩阵归一化:normalize()函数,参数 ...
- OpenCV3编程入门笔记(一)
---恢复内容开始--- 图像处理技术一般包括图像压缩,增强和复原,匹配.描述和识别3个部分.图像处理和计算机视觉的区别在于:图像处理侧重于“处理”图像——如增强.还原.去噪.分割等:而计算机视觉重点 ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
- OpenCV3编程入门.记录
ZC:OpenCV3编程入门_毛星云编著_电子工业出版.pdf 1.在看到 PDF.P134(计算数组加权和:addWeighted()函数)的时候,其中讲到“当输出数组的深度为CV_32S时,这个函 ...
- 《深度学习框架PyTorch:入门与实践》的Loss函数构建代码运行问题
在学习陈云的教程<深度学习框架PyTorch:入门与实践>的损失函数构建时代码如下: 可我运行如下代码: output = net(input) target = Variable(t.a ...
随机推荐
- 操作SQLite的dbhelper
操作SQLite的dbhelper public class DbHelper { string connStr = @"Data Source=" + System.Enviro ...
- BZOJ 2561 最小生成树(最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2561 题意:给定一个边带正权的连通无向图G= (V,E),其中N=|V|,M=|E|,N ...
- block 实现原理详解(一)
对于大多数人来讲,block内部到底是怎样实现的呢?我们可以借助clang将其编译成为c++的代码,就可以看出,block到底是什么东西, 先来看这样一个问题, <!-- lang: cpp - ...
- 【转载】ogre内存管理
原文:ogre内存管理 OGRE内存分配策略相关文件及简述 OGRE提供了自己的内存分配策略,甚至为STL容器提供了新的分配策略,相关文件及简述如下: OgreMemoryAllocatedObjec ...
- Latex中关于参考文献的一些经验
又到了继春节后的又一个投稿高峰,在Latex中写参考文献时经常会出现这样那样的问题,而且出版社不同比如IEEE与Elaver,需要引入的包也有不同.在search解决方案时,发现一篇有用的博文,转载一 ...
- matplotlib
前导: 安装 numpy http://sourceforge.net/projects/numpy/files/ http://sourceforge.net/projects/numpy/file ...
- CSS布局口诀 - CSS BUG顺口溜
在进行CSS网页布局时遇到BUG,请认真阅读以下内容,非常容易记忆的,不知道哪位高人把CSS BUG编成了顺口溜了!看看好不好记住呢? 一.IE边框若显若无,须注意,定是高度设置已忘记: 二.浮动产生 ...
- IP地址验证
/** * 验证IP地址 * * @param 待验证的字符串 * @return 如果是符合格式的字符串,返回 <b>true </b>,否则为 <b>false ...
- Field+offset(len)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- poj 1654 Area (多边形求面积)
链接:http://poj.org/problem?id=1654 Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...