zoukankan      html  css  js  c++  java
  • copyTo和clone的区别/制作mask的fillpoly函数(有问题)

    OpenCV中mat::copyto( )函数使用方法

    OpenCV的fillPoly函数

      使用OpenCV库进行图像处理时,经常会用到clone和copyTo函数,这里对两个函数进行介绍。

    • copyTo函数

      实现和clone一样的功能,但一般多用于掩模贴图

    1 Mat src = imread(imagepath); 
    2 Mat src_temp;
    3 src.copyTo(src_temp);

      另外用途最广的是它的贴图功能:

    1 src.copyTo(src_temp, mask);

      其中mask为一个二值的掩模图像,如果如果在某个像素点(i, j)其值为1,则把src中对应位置的像素复制到src_temp中,其余为0的位置像素保持不变。在制作mask时,将感兴趣区域填充为白色,其余部分为黑色可以使用fillpoly函数。

    • fillPoly函数
     1 #include <iostream>    
     2 #include <opencv2/opencv.hpp>  
     3   
     4 using namespace cv;  
     5 using namespace std;  
     6   
     7   
     8 int main()  
     9 {  
    10     Mat src = imread("02.jpg");  
    11       
    12     Point root_points[1][6];  //这里有一个问题,如果数组内的数据个数事先不知道,需要开辟很大的数组,占用内存
    13     root_points[0][0] = Point(215, 220);  
    14     root_points[0][1] = Point(460, 225);  
    15     root_points[0][2] = Point(466, 450);  
    16     root_points[0][3] = Point(235, 465);  
    17     root_points[0][4] = Point(260, 390);  
    18     root_points[0][5] = Point(96, 310);  
    19   
    20     const Point* ppt[1] = { root_points[0] };  
    21     int npt[] = { 6 };  
    22   
    23     //生成原图大小的全黑图像
    24     cv::Mat mask_ann, dst;  
    25     src.copyTo(mask_ann);  
    26     mask_ann.setTo(cv::Scalar::all(0));  
    27   
    28     fillPoly(mask_ann, ppt, npt, 1, Scalar(255, 255, 255));  
    29     imshow("mask_ann", mask_ann);  
    30     src.copyTo(dst, mask_ann);  
    31     imshow("dst", dst);  
    32     waitKey();  
    33     return 0;  
    34 } 
    • clone函数

      分析源码可以看出,该函数的实现是copyTo的第一种用法:

    1 inline Mat Mat::clone() const
    2 {
    3    Mat m;
    4     copyTo(m);
    5     return m; 
    6 }

      多用于复制图片,比如读入一张图像,对其进行处理时,只是想看下效果并不像让原图发生变化,这时候可以重新声明如下:

    1 Mat src = imread(imagepath);
    2 Mat src_temp = src.clone();
  • 相关阅读:
    android开发我的新浪微博客户端登录页面UI篇(4.1)
    android开发我的新浪微博客户端用户授权页面UI篇(3.1)
    js操作select相关方法(收集)
    C# 位操作
    用c#创建支持多语言的WinForm应用程序
    简单的Android对文件进行读写操作
    nginx 安装+反向代理设置
    安装APK文件到Android模拟器
    浅谈C# Socket编程及C#如何使用多线程
    iPhone 动画效果类型
  • 原文地址:https://www.cnblogs.com/qinguoyi/p/8371292.html
Copyright © 2011-2022 走看看