opencv数字图像处理_数字图像处理opencv - CSDN
  • 玩转OpenCV图像预处理

    2020-07-28 13:54:20
    课程包含数字图像处理的常用知识点,覆盖面全,方便学员系统深入全面地掌握OpenCV。 【你将收获什么】 1.  掌握数字图像的在计算机内表示的方法和处理的基本原理。掌握数字图像...
  • 本文旨在总结一下OpenCV与传统图像处理。 1、疑问? 自动16年初接触深度学习开始,读了一些图像paper。涉及图像识别(ResNet、googleNet系列)、目标检测(RCNN系列、YoLo)、人脸识别、OCR。 开始一接触深度...

    做了3年多的图像处理,从本科毕设就做,到硕士毕业都没离开这个行业。本文旨在总结一下OpenCV与传统图像处理。

    1、疑问?

    自动16年初接触深度学习开始,读了一些图像paper。涉及图像识别(ResNet、googleNet系列)、目标检测(RCNN系列、YoLo)、人脸识别、OCR

    开始一接触深度学习一段时间就有一个疑问:既然深度学习这么有用,也刷新了很多领域的benchmark。那传统的机器学习方法或者图像处理(PCA\ASM\SIFT\二值图像的腐蚀、膨胀)还有意义?

    2、PCA与OpenCV

    3、腐蚀膨胀与OpenCV

    4、

    小结(一些常用函数)

    展开全文
  • OpenCV是学习数字图像处理的好工具,本专栏拟打算从对OpenCV源码的学习来研究数字图像处理中的基本操作。我开设本专栏不为别的,只希望能系统地学习OpenCV,并把我支离破碎的数字图像处理知识好好理一理。当然,最终...

    OpenCV是学习数字图像处理的好工具,本专栏拟打算从对OpenCV源码的学习来研究数字图像处理中的基本操作。我开设本专栏不为别的,只希望能系统地学习OpenCV,并把我支离破碎的数字图像处理知识好好理一理。当然,最终还是为了我的毕设啦!这是我大学的最后一个作品了,我希望能有一个好的结果。

    因此,本专栏的所有文章相当于我的学习笔记,内容仅供参考,也欢迎各位批评指正。

    OpenCV

    OpenCV是一个开源跨平台的计算机视觉函数库,它提供了各种图像处理的操作,我们可以不掌握数字图像处理的知识,就可以使用这个函数库,因此它为我们的编程提供了很大的便利。

    笔者在以前在安装OpenCV时吃了不少苦头,遇到过各种各样的问题,这里也略作总结:

    • 与VS的版本兼容问题

    由于OpenCV在更新,而VS也在更新,这就导致了二者很难保持一致。在OpenCV的路径中你会发现类似于这样的文件夹:

    opencv-vs

    其中“vc10”、“vc11”、“vc12”就分别对应VS的版本,即VS2010、VS2012、VS2013(vc14对应的是VS2015),倘若你下载的OpenCV中没有与你的VS对应版本的文件夹的话,那二者就不能兼容。

    • 程序的位数和编译模式问题

    其实这实际上是配置上的问题了。下面是VS的“Property Manager”的配置窗口:

    property-manager

    这个窗口的信息很直观,就是说你有四种配置方式:Debug编译模式+32位程序、Debug编译模式+64位程序、Release编译模式+32位程序、Release编译模式+64位程序。所以配置的时候,你需要注意选择合适的路径和动态链接库,如你想配置Debug编译模式+32位程序,你就需要选择x86的文件夹和后面带有d的动态链接库了。

    x86

    debug

    当然,配置正确了也不能保证万事大吉,你还需要在VS中设置编译模式:

    build-mode

    这里需要和前面的配置保持一致。

    上面我就总结了两种比较常见也比较致命的问题,其他细节问题这里就不赘述了。

    在本专栏中,我拟打算学习一下OpenCV中某些部分的源码,另外也会介绍一些函数的原理,当然这就很可能涉及到数字图像处理方面的知识了。

    数字图像处理

    关于数字图像处理的介绍可以参考经典的图像处理的图书,如冈萨雷斯的《数字图像处理》一书。其中这样介绍数字图像处理:

    数字图像处理是指借助于数字计算机来处理数字图像。注意,数字图像是由有限数量的元素组成,每个元素都有一个特定的位置和幅值。

    其中,对数字图像处理的历史、相关领域等做了详细的介绍,感兴趣的可以去看看。

    专栏图片

    专栏还需要上传一张图片,我不知道要选什么图片,就将OpenCV安装路径中的几个图片经过缩放、组合成了一张长图上传到了上面。

    // column_intro.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    
    using namespace cv;
    using namespace std;
    
    int main(int argc, char **argv)
    {
        if (argc < 2)
        {
            cout << "No arguments found!" << endl;
            return -1;
        }
        //cout << argc << endl;
        float frame_wd = 1110, frame_hg = 170;
        Mat frame = Mat::zeros(frame_hg, frame_wd, CV_8U);
    
        Mat scale_mat = Mat::zeros(2, 3, CV_32FC1);
        float scale_factor;
        Mat img, rst;
        // the distance of every image move in loop
        float pitch = 0.0;
    
        for (int i = 0; i < argc - 1; i++)
        {
            img = imread(argv[i + 1], CV_LOAD_IMAGE_GRAYSCALE);
            // get scale factor
            scale_factor = frame_hg / img.size().height;
            // get scale matrix
            scale_mat.at<float>(0) = scale_factor;
            scale_mat.at<float>(4) = scale_factor;
            // get size of result
            Size sz(img.size().width * scale_factor,
                img.size().height * scale_factor);
            warpAffine(img, rst, scale_mat, sz);
    
            if (pitch + rst.size().width < frame.size().width)
            {
                rst.copyTo(frame(Rect(pitch, 0, rst.size().width, frame_hg)));
                pitch += rst.size().width;
            }
            else
            {
                rst(Rect(0, 0, frame_wd - pitch, frame_hg)).
                    copyTo(frame(Rect(pitch, 0, frame_wd - pitch, frame_hg)));
            }
        }
    
        // write the result into file
        imwrite("result.png", frame);
        return 0;
    }

    在我的github或者gitee里可以下载该代码。

    很久没有写博客了。作为我的2018年第一篇博客,内容可能有点儿仓促,后面我会根据实际需要进行适当改动。

    参考资料

    1. 数字图像处理,冈萨雷斯,电子工业出版社
    2. 维基百科:OpenCV
    展开全文
  • 数字图像处理作为信息产业的重要一环,从 20 世纪 20 年代第一张数字图像通过海底电缆从伦敦传送至纽约以来,数字图像的处理收到了充分的关注和普遍的运用。图像处理科学与国民计生关系密切的学科,他能够为人类带来...
        

    1 任务陈述

    1.1 项目意义陈述

    进入 21 世纪以来,我国信息产业在生产和科研领域都出现了长足的进步,并成为国民经济的支柱产业之一。数字图像处理作为信息产业的重要一环,从 20 世纪 20 年代第一张数字图像通过海底电缆从伦敦传送至纽约以来,数字图像的处理收到了充分的关注和普遍的运用。图像处理科学与国民计生关系密切的学科,他能够为人类带来巨大的经济与社会效益。

    本课程设计要求我们利用 OpenCV 1.0,OpenCV 作为一个轻量级且高效的跨平台图像处理库,为图像处理和计算机视觉提供了很多算法。我们需要通过利用其图像容器, 对图像进行各种操作。

    我们通过学习简单的数字图像处理技术,对数字图像处理有一个感性的认识,对以后涉足此领域提供了兴趣基础。

    1.2 项目设计任务

    1.2.1 题目描述

    读入一幅彩色的数字图像,完成一系列的几何运算,并分别输出每个运算的效果图。

    1.2.2 题目要求

    先将彩色图像变为灰度图像

    然后将灰度图像旋转任意角度;如果能对彩色图像进行相应旋转加分

    最后将灰度图像和彩色图像进行水平镜像和垂直镜像

    自定义函数完成将图像保存为 bmp 格式系统功能结构和调用关系

    1.2.3 输入/输出要求

    应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。 进入每个操作后,根据程序的提示输入相应的信息

    输出每个功能的效果图

    1.2.4 编写源程序的要求

    能够实现任务书中的功能

    尽可能使界面友好、直观、易操作

    源程序要有适当的注释,使程序容易阅读

    18423381-82c1cfcc8ce5ddb2.png

    源码和文档下载地址:https://www.write-bug.com/article/1862.html

    展开全文
  • OpenCV 读取图片:Mat cv::imread( const String&amp;amp; filename, int flags = IMREAD_COLOR ) 显示图片:void imshow(const String&amp;amp; winname, InputArray mat) #include &amp;lt;opencv2\...

    OpenCV

    读取图片:Mat cv::imread( const String& filename, int flags = IMREAD_COLOR )

    显示图片:void imshow(const String& winname, InputArray mat)

    #include <opencv2\opencv.hpp>

    int main(int argc, char* argv[]) {
    cv::Mat image = cv::imread("./res/std.png", CV_LOAD_IMAGE_COLOR);//导入图片bgr三通道图片
    //cv::Mat image = cv::imread("’/res/std.png", CV_LOAD_IMAGE_GRAYSCALE);//导入图片的单通道灰度图
    //cv::Mat image = cv::imread("./res/std.png", CV_LOAD_IMAGE_UNCHANGED);//保持图片的通道导入
    cv::imshow(“image”, image);//显示图片
    cv::waitKey();//没有参数或者参数为0表示等待一个键盘事件,参数为大于零的整数n表示延迟n秒
    return 0;
    }

    
    
    展开全文
  • 1、图像读取2、图像显示3、获取图像的属性4、图像遍历的几种方式

        使用C++开发图像处理算法时,不需要去调用OpenCV的内置算法函数,主要是利用OpenCV完成图像文件的输入、输出以及自动内存管理(重点)。所以,只要需要掌握一些简单的OpenCV的操作即可。

    1、图像读取

        OpenCV支持bmp、jpg、png、tiff等常用图像格式的解析,所用API为imread。imread函数原型如下:

    CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );

    filename参数为图像文件的路径,可以是相对路径,也可以是绝对路径;flags参数为图像文件解析的方式,支持的方式有如下:

           IMREAD_UNCHANGED:不对图像文件进行任何转换,直接读取。
           IMREAD_GRAYSCALE :将任何图像均转换为灰度图像(单通道)进行读取。
           IMREAD_COLOR:将任何图像均转为RGB彩色图像(三通道)进行读取。
           IMREAD_ANYDEPTH:如果不设置这个参数,16/32位图像将会自动转为8位图像。
           IMREAD_ANYCOLOR:将按照图像文件设定的颜色格式进行图像读取。

           IMREAD_LOAD_GDAL:调用gdal库进行图像文件读取。(可以简单地理解为读取TIFF图像文件)

    示例代码:

    	//不做任何转化进行读取
    	cv::Mat matUnchanged = cv::imread("./lena.jpg", cv::IMREAD_UNCHANGED);	cv::imshow("UNCHANGED", matUnchanged);
    
    	//彩色模式进行读取	
    	cv::Mat matColor = cv::imread("./lena.jpg", cv::IMREAD_COLOR);	cv::imshow("COLOR", matColor);
    
    	//灰度模式进行读取
    	cv::Mat matGrayScale = cv::imread("./lena.jpg", cv::IMREAD_GRAYSCALE);
    	cv::imshow("GRAYSCALE", matGrayScale);

    运行结果:

    2、图像显示

        OpenCV的图像显示函数为imshow,函数原型如下:

    CV_EXPORTS_W void imshow(const String& winname, InputArray mat);

    winname参数表示显示图像窗口的名称(任意字符),mat参数表示需要显示的图像。对于这个函数,需要注意的是(特别是新手),imshow函数只支持8位灰度图像、8位彩色图像和32位灰度图像(像素值范围0-1),具体原因大家可以自行百度关键词【显示器灰度等级】。

    3、获取图像的属性

        图像的常用属性有图像的宽度、高度、数据缓存区指针(图像像素存储地址)、图像的通道数、深度。示例代码:

           cv::Mat matUnchanged = cv::imread("./lena.jpg", cv::IMREAD_UNCHANGED);
    	//宽度
    	std::cout << "宽度:"<<matUnchanged.cols << std::endl;
    	//高度
    	std::cout << "高度:" << matUnchanged.rows << std::endl;
    	//数据缓存区指针
    	unsigned char* pData = matUnchanged.data;
    	std::cout << "数据地址:" << &pData << std::endl;
    	//通道数
    	std::cout << "通道数:" << matUnchanged.channels() << std::endl;
    	//深度
    	//elemSize函数返回的是一个像素占用的字节数
    	std::cout << "深度:" << matUnchanged.elemSize() / matUnchanged.channels() * 8 << std::endl;
    	cv::imshow("UNCHANGED", matUnchanged);
    	cv::waitKey(0);

     

     

    4、图像遍历的几种方式

        作为示例,读取一副RGB彩色图像,将每个像素的R值置0作为测试。(在Windows下,RGB存储的顺序为BGR)

    (1)、使用OpenCV的at成员函数

        OpenCV提供了便利的访问图像数据的接口,at函数原型:

    template<typename _Tp> inline _Tp& Mat::at(int i0, int i1)

    参数i0为行号,i1为列号;模板参数_Tp常用类型如下:

     

    图像类型 _Tp参数
    单通道灰度 unsigned char
    三通道彩色(8位) cv::Vec3b
    16位灰度

    unsigned short

    32位浮点型 float
    双通道32位 cv::Vec2f

     

    示例代码:

    
     
    for (size_t r = 0; r < matUnchanged.rows; r++)//行
    	for (size_t c = 0; c < matUnchanged.cols; c++)//列
    	{
    		cv::Vec3b& bgr = matUnchanged.at<cv::Vec3b>(r, c);
    		bgr[2] = 0;
    	}

     

    (2)、使用指针

     

    
     
    for (size_t r = 0; r < matUnchanged.rows; r++)//行
    	{
    		//step返回图像一行的字节数
    		unsigned char* pRow = matUnchanged.data + r * matUnchanged.step[0];//计算图像行首指针
    		for (size_t c = 0; c < matUnchanged.cols; c++)//列
    		{
    			pRow[3 * c + 2] = 0;
    		}
    	}

     

    (3)、行首指针存储法

     

    //存储图像行首指针
    	std::vector<unsigned char*> rowPtr(matUnchanged.rows);
    	for (size_t r = 0; r < matUnchanged.rows; r++)
    		rowPtr[r] = matUnchanged.data + r * matUnchanged.step[0];
    
    	//遍历图像
    	for (size_t r = 0; r < matUnchanged.rows; r++)//行
    	for (size_t c = 0; c < matUnchanged.cols; c++)//列
    	{
    		rowPtr[r][c * 3 + 2] = 0;
    	}

     

        访问图像数据的方式有很多,这里只列出几种常用的方式,考虑到算法的效率问题,通常使用指针对数据进行访问。

     

    技术交流合作QQ:3355138068 

    展开全文
  • 大量的OpenCV学习教程
  • OpenCV数字图像处理基础
  • OpenCV数字图像处理之ROI区域的提取 利用mask(掩模)技术提取纯色背景图像ROI区域中的人和物,并将提取出来的人或物添加在其他图像上。 1、实现原理 先通过cv.cvtColor()函数,将原RGB彩色图像转换为hsv色彩空间的...
  • OpenCV数字图像处理六:图像垂直翻转 2013-06-02 20:34 959人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: OpenCV数字图像处理(19) 作者同类文章X 版权声明:...
  • 数字图像处理基础及OPENCV实现.pdf,高清并且带有书签,有需要的可以下载
  • 数字图像处理基础及OPENCV实现-高清-完整目录-2014年12月
  • 图像处理算法中,往往需要把彩色图像转换为灰度图像。图像灰度化是将一幅彩色图像转换为灰度化图像的过程。彩色图像通常包括R、G、B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色图像的R、G、...
  • 最近看到一位博主,写了很多关于 Python图像处理的系列博客,发现这位博主写的很有意思,于是就跟着它的博客去做了实验,还挺好玩的。然后根据他的博客,整理了一下我做的一些实验,方便后期查阅。 1 使用OpenCV...
  • 自己写的小实验,包括图片的缩放,旋转,平移,傅里叶变换,图像平滑,图像锐化,以及一些边缘检测算子的操作,代码写的不是很简洁,仅供学习参考
  • 数字图像处理 实验代码 python+opencv exp1图像的显示与存储,exp2基本几何变换,平移、旋转、缩放等,图像的傅里叶变换,exp3图像的对比度增强+直方图修正+平滑、锐化,exp4边缘检测
  • 1.灰度化与二值化 //读取原图 Mat img; img = imread("../Leana.png"); //灰度化 Mat img_gray = Mat::... //对每个像素点进行处理,I=0.3B+0.59G+0.11R int rowNumber = img.rows; int colNumber = img.c...
  • 图像的错切变换实际上是平面景物在投影平面上的非垂直投影效果。图像错切变换也称为图像剪切、错位或错移变换。图像错切的原理就是保持图像上各点的某一坐标不变,将另一个坐标进行线性变换,坐标不变的轴称为依赖轴...
  • 这份代码用于数字图像处理点特征提取(角点检测),基于VC++,使用了opencv,但是只用来mat,没有使用cv函数,几乎每一行都有注释,所以不用担心看不懂。
  • <br /> 数字图像处理的数学基础及相关运算:点运算 (1)线性点运算: >> mission(a); >> a=imread('guet.gif'); figure(1);imshow(a); b1=a+45; figure(2);imshow(b1);...
1 2 3 4 5 ... 20
收藏数 17,221
精华内容 6,888
关键字:

opencv数字图像处理