图像处理之基础---基于opencv的灰度图像微分

argv分别为,可执行文件名、读入的原始图像、输出原始图像的灰度值、输出原始图像灰度值沿x轴方向的一阶微分、输出原始图像灰度值沿x轴方向的二阶微分。

#include
#include
#include
#include
#include

#pragma comment( lib, "opencv_highgui243d.lib" ) 
#pragma comment( lib, "opencv_core243d.lib" ) 
#pragma comment( lib, "opencv_ml243d.lib" ) 
#pragma comment( lib, "opencv_imgproc243d.lib" )

int main( int argc, char** argv ) {

int height, width, step, channels;
    uchar *grayData;
   
    uchar grayDataTmp, prev1GrayDataTmp, prev2GrayDataTmp;
   
    int differentialGrayFirstOrder, differentialGraySecondOrder, prevDifferentialGrayFirstOrder;
    int i, j;
   
    FILE *fpGrayOrgn, *fpGrayFirst, *fpGraySecond;
   
    IplImage *grayImg;

//load image in single channel, aka. transform the image to gray (but not save)
    grayImg = cvLoadImage(argv[1], 0);

//exit from failing loading source image
    if (!grayImg)
    {
        printf("Could not load image file: %s", argv[1]);
        exit(1);
    }

//get basic information of the image
    height = grayImg->height;
    width = grayImg->width;
    step = grayImg->widthStep;
    channels = grayImg->nChannels;

//print image on screen and show basic information of the image
    printf("Processing a %dx%d image with %d channels\n", height, width, channels);
    cvNamedWindow ("mineSweeperWindow", CV_WINDOW_AUTOSIZE);
    cvShowImage ("mineSweeperWindow", grayImg);

//exit from file create error
    fpGrayOrgn = fopen(argv[2], "w+");
    if (fpGrayOrgn == NULL)
    {
        printf("File %s create/open error!", argv[2]);
        exit(2);
    }
    fpGrayFirst = fopen(argv[3], "w+");
    if (fpGrayFirst == NULL)
    {
        printf("File %s  create/open error!", argv[3]);
        exit(3);
    }
    fpGraySecond = fopen(argv[4], "w+");
    if (fpGraySecond == NULL)
    {
        printf("File %s create/open error!", argv[4]);
        exit(4);
    }

//move pointer to the start of file
    rewind(fpGrayOrgn);
    rewind(fpGrayFirst);
    rewind(fpGraySecond);

//get every value (in gray) and output to a txt file
    grayData = (uchar *)grayImg->imageData;
    for (i = 0; i < height; ++i)
    {
        for (j = 0; j < width; ++j)
        {
            //get value
            grayDataTmp = grayData[i*step+j];
            fprintf(fpGrayOrgn, "%4d ", grayDataTmp);

//init
            if (0 == j)
            {
                prev1GrayDataTmp = 0;
                prev2GrayDataTmp = 0;
                prevDifferentialGrayFirstOrder = 0;
            }
            //calculate  difference of first-order
            differentialGrayFirstOrder = (int)grayDataTmp - (int)prev1GrayDataTmp;
            fprintf (fpGrayFirst, "%4d", differentialGrayFirstOrder);

//calculate difference of second-order
            differentialGraySecondOrder = differentialGrayFirstOrder - prevDifferentialGrayFirstOrder;
            fprintf (fpGraySecond, "%4d", differentialGraySecondOrder);

//re-assignment
            prevDifferentialGrayFirstOrder = differentialGrayFirstOrder;
            prev2GrayDataTmp = prev1GrayDataTmp;
            prev1GrayDataTmp = grayDataTmp;
        }

//insert a newline
        fprintf(fpGrayOrgn, "\n");
        fprintf(fpGrayFirst, "\n");
        fprintf(fpGraySecond, "\n");
    }

fclose (fpGrayOrgn);
    fclose (fpGrayFirst);
    fclose (fpGraySecond);

//end print process
    cvWaitKey(0);
    cvReleaseImage( &grayImg );
    cvDestroyWindow("mineSwepperWindow");

return ( 0 );
}
【】

http://www.infineon-ecosystem.org/focusnie/blog/13-07/295656_9bd39.html

时间: 2024-09-26 20:08:30

图像处理之基础---基于opencv的灰度图像微分的相关文章

基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)

GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的功能增强. 这里将算法库开放源代码,并且编写一系列blog对函数实现进行说明.目的是在于“取之于互联网,用之于互联网”.并且也希望该库能够继续发展下去. 由于算法库基于Opencv和Mfc进行编写,所以要求阅读使用者具备一定基础. 最终提交的是GOCVHelper.h 和GOCVHelper版本号.

基于OpenCV的图片卡通化处理

学习OpenCV已有一段时间,除了研究各种算法的内容,在空闲之余,根据书本及资料的引导,尝试结合图像处理算法和日常生活联系起来,首先在台式机上(带摄像头)完成一系列视频流处理功能,开发平台为Qt5.3.2+OpenCV2.4.9. 本次试验实现的功能主要有: 调用摄像头捕获视频流: 将帧图像转换为素描效果图片: 将帧图像卡通化处理: 简单地生成"怪物"形象: 人脸肤色变换. 本节所有的算法均由类cartoon中的函数cartoonTransform()来实现: // Frame:输入每

基于 OpenCV 的人脸识别

基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从谷歌街景的图片拼接,到交互艺术展览的技术实现中,都有 OpenCV 的身影. OpenCV 起始于 1999 年 Intel 的一个内部研究项目.从那时起,它的开发就一直很活跃.进化到现在,它已支持如 OpenCL 和 OpenGL 的多种现代技术,也支持如 iOS

基于opencv和QT的瞳孔精确检测程序

本文为作者为毕业设计所写的瞳孔精确检测程序,谢绝任何形式的转载. 本篇博客是在作者的前两篇博客 <基于QT和opencv的摄像头(本地图片)读取并输出程序>和< 基于opencv和QT的人脸(人眼)检测程序>的基础上进行开发的.主要原理是:针对已经检测到的人眼区域图像,利用边缘检测和Hough变换实现瞳孔的精确检测. 首先建立一个图像处理类,对每一帧图像进行处理. class ImgProcess { private: Mat inimg;//输入图像 Mat outimg;//输

Csharp调用基于Opencv编写的类库文件

现在将Csharp调用基于Opencv编写的类库文件(Dll)的方法定下来,我取名叫做GreenOpenCsharpWarper,简称GOCW. 一.CLR编写的DLL部分 1.按照正常方法引入Opencv; 2.提供接口函数,进行图像处理(这里只是实现了cvtColor,实际过程中可以用自己编写的复杂函数) String^  Class1::Method(cli::array<unsigned char>^ pCBuf1){     pin_ptr<System::Byte> p

Java基于opencv实现图像数字识别(二)—基本流程

Java基于opencv实现图像数字识别(二)-基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条:来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程. 我做的主要是表格中数字的识别,但这个不是重点.重点是通过这个我们可以举一反三,来实现我们自己的业务. 图像的识别主要分为两步:图片预处理和图像识别:这两步都很重要 图像预处理: 1. 图像灰度化:二值化 2. 图像降噪,去除干扰线 3. 图像腐蚀.膨胀处理 4. 字符分割 5. 字符归一化 图像识别: 1.

基于opencv网络摄像头在ubuntu下的视频获取

 基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参考http://blog.csdn.net/xiabodan/article/details/23547847 3  测试代码 编译 g++ cameraCaptrue.cpp -o test `pkg-config --libs --cflags opencv` cameraCaptrue.cpp

基于opencv的小波变换

基于opencv的小波变换 提供函数DWT()和IDWT(),前者完成任意层次的小波变换,后者完成任意层次的小波逆变换.输入图像要求必须是单通道浮点图像,对图像大小也有要求(1层变换:w,h必须是2的倍数:2层变换:w,h必须是4的倍数:3层变换:w,h必须是8的倍数......),变换后的结果直接保存在输入图像中.1.函数参数简单,图像指针pImage和变换层数nLayer.2.一个函数直接完成多层次二维小波变换,尽量减少下标运算,避免不必要的函数调用,以提高执行效率.3.变换过程中,使用了一

图像处理之基础---卷积傅立叶变换中的复数

整个看FFT过程中复数一直很折磨我. 原本的实数的东西通过复数表达很像旋转矩阵用quaternion来表达,尽管旋转vector还是要用matrix来做,但是通过用quaternion表达的旋转意义可以做插值等很多快速的操作,而且内存消耗也小,在做完这些操作之后再转成matrix用就好了. 复数表达也是类似. a+bi = M*(cos(theta)+sin(theta)*i)----极坐标 cos(x) + sin(x)*i = exp(x*i)----欧拉公式 这个用欧拉公式转出来的exp(