zoukankan      html  css  js  c++  java
  • 【练习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类型和大小相同,不然报错,可以设置兴趣区域达到此目的

  • 相关阅读:
    致虚极守静笃
    DNS 透明代理
    Java“禁止”泛型数组
    Java和C#语法对比
    JVM 内存区域 (运行时数据区域)
    Java8 使用
    G1收集器的收集原理
    BZOJ 2222: [Cqoi2006]猜数游戏【神奇的做法,傻逼题,猜结论】
    数据结构之网络流入门(Network Flow)简单小节
    BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/4454800.html
Copyright © 2011-2022 走看看