• 【练习5.7】cvCopy、阈值化、掩码图像、ROI、COI


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

      

    题目要求:

     使用练习6生成的掩码。载入一张外景图,然后在cvCopy中使用这个掩码:

    a、复制外景图到一张新图中,只复制掩码中值不等于0的部分。

    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     const char * fileMask = "D:\Work\Work_Programming\Source\Image\OpenCVExerciseImage\第5章\ExerciseResult_5-6.PNG";
    22     IplImage * src1 = cvLoadImage(fileName1, CV_LOAD_IMAGE_GRAYSCALE);
    23     IplImage * imgMask = cvLoadImage(fileMask, CV_LOAD_IMAGE_GRAYSCALE);
    24     assert(src1);
    25     assert(imgMask);
    26      
    27     cvNamedWindow("原始图像", 0);    
    28     cvNamedWindow("题目_a", 0);
    29     cvNamedWindow("题目_b", 0);
    30 
    31     cvShowImage("原始图像", src1);
    32      
    33     //---------------------------a:开始--------------------------------//
    34     cvThreshold(imgMask, imgMask, 100, 255, CV_THRESH_BINARY);
    35 
    36 
    37     IplImage * imgCopy = cvCloneImage(src1);
    38     cvZero(imgCopy);
    39 
    40     //必须设置兴趣区域,保证输入图像、输出图像、掩码图像ROI、COI类型和大小相同,不然报错
    41     CvRect rect = cvRect(0, 0, imgMask->width, imgMask->height);
    42     cvSetImageROI(src1, rect);
    43     cvSetImageROI(imgCopy, rect);
    44 
    45     cvCopy(src1, imgCopy, imgMask);
    46 
    47     cvResetImageROI(imgCopy);
    48     cvResetImageROI(src1);     
    49 
    50     cvShowImage("题目_a", imgCopy);
    51 
    52     //---------------------------a:结束--------------------------------//    
    53 
    54     //---------------------------b:开始--------------------------------//
    55     cvThreshold(imgMask, imgMask, 100, 255, CV_THRESH_BINARY);
    56 
    57 
    58     IplImage * imgCopy_b = cvCloneImage(src1);
    59 
    60     cvSetImageROI(imgCopy_b, rect);
    61     cvCopy(imgMask, imgCopy_b,imgMask);
    62     cvResetImageROI(imgCopy_b);
    63 
    64 
    65     cvShowImage("题目_b", imgCopy_b);
    66 
    67     //---------------------------b:结束--------------------------------//    
    68 
    69     cvWaitKey(0);
    70 
    71     cvReleaseImage(&src1);
    72     cvReleaseImage(&imgMask);
    73     cvReleaseImage(&imgCopy);
    74     cvReleaseImage(&imgCopy_b);
    75 
    76     cvDestroyWindow("原始图像");     
    77     cvDestroyWindow("题目_a");
    78     cvDestroyWindow("题目_b");
    79 
    80     return 0;
    81 }
    82   

     

    结果图片:

    要言妙道:

     cvCopy使用注意事项:必须保证输入图像、输出图像、掩码图像ROI、COI类型和大小相同,不然报错,可以设置兴趣区域达到此目的

  • 相关阅读:
    定时器与休眠
    进程的创建
    详述进程创建和程序执行
    线程
    会话,进程组,作业控制
    进程优先级和调度
    进程资源
    日志信息log
    能力
    浅谈产品模型(Profile)在程序设计中的作用
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/4454800.html
Copyright © 2020-2023  润新知