• 大小: 7KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签: 梯度  c语言  

资源简介

C语言实现梯度的计算,速度比opencv快,效率高,可移植性强,代码的阅读性好,图像处理与c语言的有效结合

资源截图

代码片段和文件信息

实现1(完全借助OpenCV的函数,较慢):

#include “stdafx.h“

#include “highgui.h“

#include “cv.h“

 

void Soble(IplImage *imgIplImage* gradientImage)

{

         IplImage* H = cvCreateImage(cvGetSize(img) 321);

         IplImage* V = cvCreateImage(cvGetSize(img) 321);

         IplImage* HV = cvCreateImage(cvGetSize(img) 321);

 

         //both horizontal and vertical gradient

         cvSobel(imgH013);  

         cvSobel(imgV103);

 

         //total gradient = sqrt(horizontal*horizontal+vertical*vertical)

         int ij;

         double v1v2v;

         for (i=0;iheight;i++)

        {

                  for (j=0;jwidth;j++)

                   {

                            v1 = cvGetReal2D(Hij);

                            v2 = cvGetReal2D(Vij);

                            v = sqrt(v1*v1+v2*v2);

 

                            cvSetReal2D(HVijv);

                   }

        }

         cvNormalize(HVgradientImage0255CV_MINMAX0);

 

         cvReleaseImage(&H);

         cvReleaseImage(&V);

         cvReleaseImage(&HV);

}

int _tmain(int argc _TCHAR* argv[])

{

         IplImage * img = cvLoadImage(“1.jpg“1);

         IplImage *grayImage = cvCreateImage(cvGetSize(img) 8 1);

         IplImage *gradientImage = cvCreateImage(cvGetSize(img)81);

 

         cvCvtColor(img grayImage CV_BGR2GRAY);  // color to gray

 

         double t = cvGetTickCount();

         Soble(grayImagegradientImage);  

         t = (cvGetTickCount()-t)/1000000;

         printf(“time: %4.4f\n“ t);

 

         cvNamedWindow(“grayImage“1);

         cvShowImage(“grayImage“grayImage);

         cvNamedWindow(“gradientImage“1);

         cvShowImage(“gradientImage“gradientImage);

 

         cvWaitKey(0);

         cvReleaseImage(&img);

         cvReleaseImage(&grayImage);

         cvReleaseImage(&gradientImage);

         return 0;

}

 


效果图如下:



   

实现2(借助指针,较快): 


#include “stdafx.h“

#include “highgui.h“

#include “cv.h“

 

int FastSobel(unsigned char *in int width int height int widthStep

                               unsigned char *edg unsigned char *ang)

{

         int ij;

 

         unsigned char *inPtr = NULL;

         unsigned char *inPtr1 = NULL;

         unsigned char *inPtr2 = NULL;

         unsigned char *inPtr3 = NULL;

         unsigned char *inPtr4 = NULL;

         unsigned char *inPtr5 = NULL;

         unsigned char *inPtr6 = NULL;

 

         int *pEdgeX = (int *)calloc(width*height sizeof(int));

         int *pEdgeY = (int *)calloc(width*height sizeof(int));

         int *pEdgeXPtr = NULL;

         int *pEdgeYPtr = NULL;

 

         unsigned char *angPtr = NULL;

         unsigned char *edgPtr = NULL;

 

         // this is heuristic and it should add receptive area

         i

评论

共有 条评论