zoukankan      html  css  js  c++  java
  • 【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor

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

      

    题目要求:

     读入一副风景图,然后将其转化为灰度图像

    a、对图像进行形态学“礼帽”操作,并显示结果

    b、将结果图像转化为8位的掩码

    c、复制灰度值到礼帽块中,显示结果→我的理解是,将第a问与b问的结果图片融合成一副图

    程序代码:

     1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。
     2 //
     3 //D:\Work\Work_Programming\Source\Image\lena.jpg
     4 
     5 
     6 #include "stdafx.h"
     7 #include <cv.h>
     8 #include <highgui.h>
     9 #include <iostream>
    10 using namespace cv;
    11 using namespace std;
    12 
    13 //函数声明-->--->-->--->-->--->-->--->//
    14 
    15 //<--<--<--<--<--<--<--<--<--函数声明//
    16 
    17 
    18 int _tmain(int argc, _TCHAR* argv[])
    19 {
    20     const char * fileName1 = "D:\Work\Work_Programming\Source\Image\OpenCVExerciseImage\第5章\风景.jpg";
    21     IplImage * src1 = cvLoadImage(fileName1, CV_LOAD_IMAGE_UNCHANGED);
    22     assert(src1);
    23       
    24     cvNamedWindow("原始图像", 0);    
    25     cvNamedWindow("题目_a", 0);
    26     cvNamedWindow("题目_b", 0);
    27     cvNamedWindow("题目_c", 0);
    28 
    29     IplImage * img_Gray = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
    30     
    31     //使用cvCvtColor和cvCopy这些函数前,都应该对参数进行验证再使用
    32     if (src1->nChannels != 3)
    33     {
    34         cout << "加载的图像必须为彩色图片" << endl;
    35         return 0;
    36     }
    37     
    38     cvCvtColor(src1, img_Gray, CV_RGB2GRAY);
    39 
    40     cvShowImage("原始图像", img_Gray);
    41      
    42     //---------------------------a:开始--------------------------------//
    43 
    44 
    45     IplImage * imgCopy = cvCloneImage(img_Gray);
    46     cvZero(imgCopy);
    47 
    48     IplConvKernel * kernel = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_RECT);
    49     cvMorphologyEx(img_Gray, imgCopy, NULL, kernel, CV_MOP_TOPHAT,6);
    50 
    51     cvShowImage("题目_a", imgCopy);
    52 
    53     //---------------------------a:结束--------------------------------//    
    54 
    55     //---------------------------b:开始--------------------------------//
    56 
    57 
    58     IplImage * imgCopy_b = cvCloneImage(img_Gray);
    59     cvZero(imgCopy_b);
    60 
    61     cvThreshold(imgCopy, imgCopy_b, 50, 255, CV_THRESH_BINARY);
    62 
    63     cvShowImage("题目_b", imgCopy_b);
    64 
    65     //---------------------------b:结束--------------------------------//    
    66 
    67     //---------------------------c:开始--------------------------------//
    68 
    69 
    70     IplImage * imgCopy_c = cvCloneImage(imgCopy);
    71     //cvZero(imgCopy_c);
    72 
    73     cvCopy(imgCopy_b, imgCopy_c, imgCopy_b);
    74 
    75     cvShowImage("题目_c", imgCopy_c);
    76 
    77     //---------------------------c:结束--------------------------------//    
    78 
    79     cvWaitKey(0);
    80 
    81     cvReleaseImage(&src1);
    82     cvReleaseImage(&imgCopy);
    83     cvReleaseImage(&imgCopy_b);
    84     cvReleaseImage(&imgCopy_c);
    85 
    86     cvDestroyWindow("原始图像");     
    87     cvDestroyWindow("题目_a");
    88     cvDestroyWindow("题目_b");
    89     cvDestroyWindow("题目_c");
    90 
    91     return 0;
    92 }
    93   

     

    结果图片:

    要言妙道:

     ①使用cvCvtColor、cvCopy等函数时,注意验证输入图片的有效性,不然会报错,例如:

    1     //使用cvCvtColor和cvCopy这些函数前,都应该对参数进行验证再使用
    2     if (src1->nChannels != 3)
    3     {
    4         cout << "加载的图像必须为彩色图片" << endl;
    5         return 0;
    6     }
    7     
    8     cvCvtColor(src1, img_Gray, CV_RGB2GRAY);

    ②制作掩码图像其实就是二值化图像,使用漫水填充法也可以得到掩码图像,而且其中有关于mask的参数图像的用法

    ③可以使用cvCopy进行图像融合,利用上第三个参数

    ④礼帽和黑帽:这些操作分别用于分离比邻近的点亮或暗的一些斑块。所以,可用于实现类似Cognex的CogBlobTool功能,OpenCV中有类似描述Blob的结果:CvConnectedComponent

  • 相关阅读:
    Redis(六)--- Redis过期策略、内存淘汰机制、消息及事物
    Redis(五)--- Redis的持久化RDB与AOF
    Redis(四)--- Redis的命令参考
    Redis(三)--- Redis的五大数据类型的底层实现
    Redis(二)--- Redis的底层数据结构
    Redis(一)--- 概述
    jquery dataTable 获取某行数据
    对这学期软件工程课的评价
    求二维数组的最大子数组
    求整数数组中和最大的子数组的和
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/4455632.html
Copyright © 2011-2022 走看看