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 ...
随机推荐
- Arrays.asList()使用注意点
今天看代码时, 发现书上使用了Arrays.asList()方法, 将一个数组转成了List, 然后说到得到的List不能调用add(), remove()方法添加元素或者删除,带着疑问看了下内部实现 ...
- Android开发中,那些让您觉得相见恨晚的方法、类或接口
Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...
- NSIS学习记录の----NSIS插件调用
我们都知道NSIS可以和C或者C++混合编程,方法是NSIS调用C或C++的动态库,那么如何调用呢? 首先我们来创建动态库: // add.cpp : 定义 DLL 应用程序的导出函数. #inclu ...
- Mysql-学习笔记(==》触发器 十一)
-------触发器-------- USE db;SELECT FROM sss; CREATE TABLE sssbak LIKE sss;SHOW CREATE TABLE sss;SHOW C ...
- 编译android源码官方教程(4)开始编译
Preparing to Build IN THIS DOCUMENT Obtain proprietary binaries Download proprietary binaries Extrac ...
- .Net操作注册表--un
C#操作注册表 导入命名空间 Using MicroSoft.Win32;//64位系统装的64位版本
- 计算5的阶乘并在JSP页面输出
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- qt 3 获取文件路径中的一部分
QList<QString> qlist = path.split(QRegExp("[\\\\/]")); QString FileName = qlist.at(q ...
- 高仿bootstrap的layout效果(一)
公司研发一个新的cms,为了减少以后的修改和尽可能大程度的满足客户对cms的灵活需求,我的经理安排我去做一个与bootstrap的layout差不多的效果,这叫什么,锻炼的时候来了,加油,这个急不得一 ...
- @SuppressWarnings—注解用法详解
一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...