• 【练习6.14】积分图像cvIntegral及使用积分图的性质找横向和纵向边,IplImage结构中widthStep细节


    提纲
    题目要求
    程序代码
    结果图片
    要言妙道

      

    题目要求:

     加载一副灰度图,得到它的积分图。利用积分图的性质找到图像里的横向和纵向边缘。

    利用细长的矩形,在适当的位置减去或加上它们。

    备注:边缘查找尚未加入代码

    程序代码:

     1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。
     2 //
     3 //D:\Work\Work_Programming\Source\Image\lena.jpg
     4 
     5 #include "stdafx.h"
     6 #include <cv.h>
     7 #include <highgui.h>
     8 #include <iostream>
     9 
    10 #include <opencv2/legacy/legacy.hpp>
    11 //#pragma comment(lib, "opencv_legacy2411.lib")
    12 
    13 using namespace cv;
    14 using namespace std;
    15 
    16 //函数声明-->--->-->--->-->--->-->--->//
    17 
    18 
    19 //<--<--<--<--<--<--<--<--<--函数声明//
    20 
    21 int _tmain(int argc, _TCHAR* argv[])
    22 {
    23     const char* image_path = "D:\Work\Work_Programming\Source\Image\OpenCVExerciseImage\第6章\纵横线2.jpg";
    24     IplImage * image_resource =    cvLoadImage(image_path, CV_LOAD_IMAGE_GRAYSCALE);
    25     assert(image_resource);
    26 
    27     cvNamedWindow("原始图像", CV_WINDOW_AUTOSIZE);
    28     cvShowImage("原始图像", image_resource);
    29 
    30     CvSize size_image = cvSize(image_resource->width, image_resource->height);
    31 
    32     IplImage * image_sum = cvCreateImage(cvSize(size_image.width+1,size_image.height+1), IPL_DEPTH_32F, image_resource->nChannels);
    33 
    34     cvIntegral(image_resource, image_sum);
    35 
    36     cvSave("image_sum.xml", image_sum);
    37 
    38     //IplImage * image_8U_ToShow = cvCreateImage(size_image, IPL_DEPTH_8U, image_sum->nChannels);
    39 
    40     //cvNamedWindow("积分图像", CV_WINDOW_AUTOSIZE);
    41     //cvShowImage("积分图像", image_8U_ToShow);
    42 
    43     cvWaitKey();
    44 
    45     cvReleaseImage(&image_resource);
    46     cvReleaseImage(&image_sum);
    47     //cvReleaseImage(&image_8U_ToShow);
    48 
    49     cvDestroyAllWindows();
    50 
    51     return 0;
    52 }

    结果图片:

    要言妙道:

     ①对于一幅灰度的图像,积分图像中的任意一点(x,y)的值是指从图像的左上角到这个点的所构成的矩形区域内所有的点的灰度值之和

    ②如果输入图像大小是W×H,则输出图像sum、sqsum、tilted_sum的大小鼻息为(W+1)×(H+1)

    ③根据输入图像的数据类型,注意将输出图像设置为32位整型或32或64位浮点型或

     ④参数widthStep与前面讨论过的CvMat中的step参数类似,包括相邻行的同列点之间的字节数。仅凭变量width是不能计算这个值得,因为为了处理过程更高效,每行都会有固定字节数来对其;因此第i行末和第i+1行开始处可能会有些冗余字节。widthstep是行字节数,应该是4的倍数

  • 相关阅读:
    RabbitMQ安全相关的网络资源介绍
    种植玉米,发酵与生物燃料的制作
    一致哈希算法Java实现
    添加xml文件编辑语法提示
    【转】10分钟搭建NDK的Android开发环境
    【转】Windows环境下Android NDK环境搭建
    【转】蓝牙4.0——Android BLE开发官方文档翻译
    【转】java提高篇(十)-----详解匿名内部类
    【转】Android自定义View的实现方法,带你一步步深入了解View(四)
    【转】java枚举类型enum的使用
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/4474918.html
Copyright © 2020-2023  润新知