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(50,50,100,000));
    //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,1,0,3,1,1);//X方向上的Sobel算子检测,其中3,1,0都是默认值
    imshow("Sobel算子X方向检测图",grad_x);
    Sobel(imgGray,grad_y,CV_8U,0,1,3,1,0);//Y方向上的Sobel算子检测,其中3,1,0都是默认值
    imshow("Sobel算子Y方向检测图",grad_y);

    addWeighted(grad_x,0.5,grad_y,0.5,0,dstImage);//合并梯度
    imshow("整体方向Sobel图",dstImage);

    Laplacian(imgGray,dstImage,CV_8U);
    imshow("laplacian算子检测图",dstImage);

    Canny(imgGray,dstImage,50,200,3);//50和200表示第一个滞后性阈值和第二个滞后性阈值,较小者用于边缘连接,较大者控制强边缘的初始段,达阈值opnecv推荐为小阈值的3倍;
                                    //3表示应用的Sobel算子的孔径大小 有默认值为3;
    imshow("Caany算子检测图",dstImage);
    //waitKey(0);

    // 霍夫变换 hough
    vector<Vec2f> lines;//定义一个矢量结构lines用于存放得到的线段矢量集合
    HoughLines(dstImage,lines,1,CV_PI/180,150);
    //依次在图中绘制出每条线段
    for (size_t i = 0;i < lines.size();i++)
    {
        float rho = lines[i][0],theta = lines[i][1];
        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+1000*(-b));//1000是取两点之间的距离,可操控量;
        pt1.y = cvRound(y0+1000*(a));//pt1是位于A较上的一个点;
        pt2.x = cvRound(x0-1000*(-b));//pt2是位于A较下的一个点;
        pt2.y = cvRound(y0-1000*(a));

        line(dstImage,pt1,pt2,Scalar(55,100,195),1,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,-1,Scalar(0),3);
    imshow("轮廓图",dstImage);
    waitKey(0);

    //阈值化操作
    threshold(srcImage,dstImage,100,255,3);
    imshow("固定阈值化图像",dstImage);
    adaptiveThreshold(imgGray,dstImage,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,1);
    imshow("自适应阈值化图像",dstImage);
    waitKey(0);

    // resize函数实现
    resize(srcImage,dstImage,Size(),0.5,0.5);//缩小为一半
    imshow("缩放1/2图",dstImage);
    resize(srcImage,dstImage,Size(),2,2);//放大2倍
    imshow("放大2倍图",dstImage);
    resize(srcImage,dstImage,Size(srcImage.cols*3,srcImage.rows*3));//放大3倍
    imshow("放大3倍图",dstImage);
    //waitKey(0);

    // 金字塔函数实现
    pyrUp(srcImage,dstImage,Size(srcImage.cols*2,srcImage.rows*2));// 放大2倍
    imshow("金字塔放大2倍图",dstImage);
    pyrDown(srcImage,dstImage,Size(srcImage.cols/2,srcImage.rows/2));// 缩小2倍
    imshow("金字塔缩小2倍图",dstImage);
    waitKey(0);

    //漫水填充算法
    Rect ccomp;
    floodFill(srcImage,Point(50,300),Scalar(155,255,55),&ccomp,Scalar(20,20,20),Scalar(20,20,20));
    imshow("漫水填充图",srcImage);

    //膨胀腐蚀
    Mat element = getStructuringElement(MORPH_RECT,Size(15,15));
    erode(srcImage,dstImage,element);
    imshow("腐蚀图",dstImage);
    dilate(srcImage,dstImage,element);
    imshow("膨胀图",dstImage);
    waitKey(0);

    //滤波
    boxFilter(srcImage,dstImage,-1,Size(3,3));
    imshow("方框滤波图",dstImage);

    blur(srcImage,dstImage,Size(3,3));
    imshow("均值滤波图",dstImage);

    GaussianBlur(srcImage,dstImage,Size(5,7),1,1);
    imshow("高斯滤波图",dstImage);
    waitKey(0);
    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(100,200,imageRIO.rows,imageRIO.cols));
    Mat mask = imread("原图.jpg");
    logoImage.copyTo(imageRIO1,mask);
    imshow("1",srcImage);
    imshow("2",dstImage);
    waitKey(0);
    return 0;
}
时间: 2024-10-11 17:08:18

Opencv3编程入门笔记(6)自我验证各函数程序代码的相关文章

Opencv3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

19      腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RECT,交叉形MORPH_CROSS,椭圆形MORPH_ELLIPSE.Matlab中会有更多一点的模板. 例如: Mat element = getStructuringElement(MORPH_RECT,Size(15,15)); erode(srcImage,dstImage,

OpenCV3编程入门_毛星云编著pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容提要OpenCV在计算机视觉领域扮演着重要的角色.作为一个基于开源发行的跨平台计算机视觉库,OpenCV实现了图像处理和计算机视觉方面的很多通用算法.<OpenCV3编程入门>以当前最新版本的OpenCV最常用最核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能.性能,以及新特性.书本配套的OpenCV2和OpenCV3双版本的示例代码包中,含有总计两百多个详细注释的程序源代码与思路说明.读者可以按图索骥,按技术方向进行

OpenCV3编程入门_毛星云编著_电子工业出版下载 &#348453;

下载地址: http://www.gqylpy.com/di/17 <OpenCV3编程入门>毛星云编著PDF高清完整版-下载 内容提要 OpenCV在计算机视觉领域扮演着重要的角色.作为一个基于开源发行的跨平台计算机视觉库,OpenCV实现了图像处理和计算机视觉方面的很多通用算法.<OpenCV3编程入门>以当前最新版本的OpenCV最常用最核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能.性能,以及新特性.书本配套的OpenCV2和OpenCV3

linux shell编程入门笔记

shell编程的重要性: 对于hadoop程序员,通常需要熟悉shell编程,因为shell可以非常方便的运行程序代码. shell文件格式: 文件名后缀通常是.sh #!/bin/sh[先指定文件下面用的是哪一个sh] #这里是注释 shell中的变量: (1)变量不需要声明,初始化不需要指定类型 (2)变量名称只能有字母.数字.下划线组成,不能使用数字开头 (3)分类: 临时变量 环境变量 (export) 显示变量值使用echo命令 ,加上变量名对于变量引用,也可以使用{变量名} 示例程序

8.17_Linux之bash shell脚本编程入门篇(三)之循环以及函数function的使用

bash shell脚本编程入门篇(三)之循环 什么是循环执行? 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 相关命令:for, while, until,selet, for命令的使用 作用: 依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束 命令格式: for 变量名 in 列表; do 循环体(正常执行的执行命令) 语句1 语句2 语句3 ... done 列表生成方式: (

《OpenCV3编程入门》学习笔记三:HighGUI图形用户界面

一:内容介绍 本节主要介绍OpenCV的HighGUI模块,并分享几个例子: 1. 用imwrite函数生成png透明图 2. 综合示例程序:图像的载入.显示与输出 3. 为程序界面添加滑动条 4. 鼠标操作 二:学习笔记 1. 使用OpenCV首先要学会使用它的图形界面,此章节介绍了OpenCV的一些HighGUI使用方法,并不涉及什么理论部分.关于HighGUI大家可参考官网HighGUI模块 http://docs.opencv.org/3.1.0/d7/dfc/group__highgu

OpenCV3编程入门-读书笔记3-滤波

一.领域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积得到右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用的邻域算子,输入像素加权得到输出像素: 其中权重核   为"滤波系数".上面的式子可以简记为: 二.线性滤波 1.方框滤波(box Filter) 最简单的线性滤波是移动平均或方框滤波,用 K*K窗口中的像素值平均后输出,核函数为: 其实等价于图像与全部元素值为1的核函数进行卷积再进行尺度

OpenCV3编程入门读书笔记2-core组件

一.颜色空间缩减 1.概念 如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响.利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取为新值0,10~19取为10,以此类推,这样每个像素有26*26*26种可能值,比上面的可能值要小很多. 2.公式 P_New = ( P_Old / divide ) * divide   (P表示像素值) 3.处理 如果对原图像每个像素都进行上面的公式运算,运算量将非常大.可以将0~255这25

OpenCV3编程入门--读书笔记

一.OpenCV概述 1.OpenCV全程Open Source Computer Vision Library,即开源计算机视觉库.它是一个跨平台的开源计算机视觉库,可以运行在windows.linux.Mac OS.Android.iOS等操作系统上.OpenCV用C/C++编写,轻量且高效,还支持使用C#.Ch.Ruby等编程语言,同时提供对Python.Ruby.MATLAB等语言的接口. OpenCV官方主页:http://opencv.org OpenCV Github主页:http