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 ...
随机推荐
- 短信轰炸PC版
前言 之前用过android版短信轰炸的apk,于是想反编apk查看源码找短信接口,做一个PC版本的,不料反编失败.后不了了之... 昨日逛论坛时无意中看到一个网站有此功能,打开一试究竟,效果可以,于 ...
- SQL 中ROLLUP 用法
SQL 中ROLLUP 用法 ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集. 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有 ...
- MVC 直接把数据库的数据输出到view(太神奇了)
@model IEnumerable<MvcApplication32.Models.UserInfo> 后台是集合类型了 ,传到前台是model了,用 IEnumerable<&g ...
- ActiveMQ点对点的消息发送案例
公司最近会用MQ对某些业务进行处理,所以,这次我下载了apache-activemq-5.12.0-bin把玩下. 基于练习方便需要,使用Windows的版本. 参考的优秀文章: activemq的几 ...
- 如何提高android串口kernel log等级
在 /device/qcom/common/rootdir/etc/init.qcom.rc write /proc/sys/kernel/printk "6 6 1 7" 第一 ...
- [POJ1681]Painter's Problem(高斯消元,异或方程组,状压枚举)
题目链接:http://poj.org/problem?id=1681 题意:还是翻格子的题,但是这里有可能出现自由变元,这时候枚举一下就行..(其实这题直接状压枚举就行) /* ━━━━━┒ギリギリ ...
- QUEEN_BLADE_2D-非常屌-113P
http://www.cgvoo.com/thread-33670-1-2.html http://blog.sina.com.cn/s/blog_4b92d6070102e7gj.html http ...
- ABAP WRITE、WRITE TO、FORMAT语句
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- hdu 1086(计算几何入门题——计算线段交点个数)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2 ...
- Simulating a Freight robot in Gazebo
Installation Before installing the simulation environment, make sure your desktop is setup with a st ...