• opencv的mat进行图像边界填充问题


    在进行人脸识别的图像预处理时,分为两个过程,

    一、补全图像为正方形或是要求的大小

    根据自己的预输入大小等比扩充,先根据输入图像的长宽,判断最长的一边,然后记录与短边的差值

    对差值除2的到要扩充的长度

     opencv会以原图为基准,逐行处理,先扩展左边界,复制原图数据到目的图像,再扩展右边界。

    cv::copyMakeBorder(src, dst, extRows, extRows, extCols, extCols, BORDER_REPLICATE);//填充边界函数

      

    二、图像等比缩小

    使用函数resize,根据自己的预输入大小等比缩小

    cv::resize(src, dst,Size(112,112));

      

    使用注意

    在对mat对象进行赋值时,注意赋值的是引用还是新的变量

    image(rect).copyTo(faceimage);
    faceimage=image(rect)
    的区别就是如此
        const char* imagepath = "0.jpg";
        cv::Mat m = cv::imread(imagepath, 1);
        cv::Mat faceimage;
        cv::Rect rect(10,10,10,10);
        m(rect).copyTo(faceimage);
        cv::Mat faceimage2=m(rect);
    
        cv::Mat dst ;
        cv::Mat dst2 ;
    
        cv::copyMakeBorder(faceimage, dst, 10, 10, 10, 10, cv::BORDER_CONSTANT);//填充边界函数
        cv::copyMakeBorder(faceimage2, dst2, 10, 10, 10, 10, cv::BORDER_CONSTANT);//填充边界函数
    
        cout << dst;
        cout << "okkkkkkkkkkkkkkkkkkkkkkkkkk";
    
        cout << dst2;
    

      输出:1

    2:

     可以看出 image(rect).copyTo(faceimage);和faceimage=image(rect),前者是类似于拷贝函数,后者则是类似与引用,个人认为是种错误

  • 相关阅读:
    理解z-index
    别在最好的年纪辜负最好的自己
    一劳永逸的flex布局
    移动端常见的兼容性问题
    css代码颜色十六进制大全
    把select的小图标替换成 自己想要的图片
    HTML中的<select>标签如何设置默认选中的选项
    js获取元素,窗口的宽度、高度
    jQuery.NiceScroll简单的API
    Linux搭建ftp服务器简单教程及使用方法
  • 原文地址:https://www.cnblogs.com/zhukaile/p/16255753.html
Copyright © 2020-2023  润新知