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 ...
随机推荐
- tarjan算法模板
终于能自己完整的打下来 #include<cstdio> #include<cstring> #include<iostream> #include<vect ...
- linux硬盘分区格式化及挂载
1.硬盘的接口类型 硬盘的接口一般分为两种,一种是IDE并行接口,一种是SATA串行接口, 在linux上面IDE接口的硬盘被识别为/dev/hd[a-z]这样的设备,其中hdc表示光驱设备,这是因为 ...
- C语言的编译过程
- 关于stl string find 容易犯的一个错误
有时候经常会判断一个字符串a中是否有子字符串b,那么有人会调用 string::find这个函数 这个函数返回子字符串首次出现的位置,那么有人会这样写 string str1 = "&qu ...
- ASP.NET API盘点
1.控制只返回JSON一种数据 public class JsonContentNegotiator : IContentNegotiator { private readonly JsonMedia ...
- Get_File_Name Usage in Oracle Forms 6i
Get_File_Name is built-in function of Oracle Forms 6i, used to get the file name with address by bro ...
- Binding的源与路径
1.把控件作为Binding的源 例子:拖动Slider,输入框中的值也会跟着改变,或在输入框中输入数值,滑动条也会自动移动 <Window x:Class="把控件作为Binding ...
- AngularJS Protractor
官网地址:http://www.protractortest.org/ 1. 预备环境 protractor 是一个 Node.js 程序,为了运行 protractor ,你首先需要 Node 环境 ...
- iOS - Swift Set 集合
前言 Set:集合 public struct Set<Element : Hashable> : Hashable, CollectionType, ArrayLiteralConver ...
- RTSP协议、RTMP协议、HTTP协议的区别
理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了. RTSP. RTMP.HTT ...