人生到头来,就是不断放下,但永远最令人心痛|

durtime

园龄:4年8个月粉丝:10关注:1

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

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

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

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

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

 

 

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

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

  

二、图像等比缩小

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

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

  

使用注意

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

image(rect).copyTo(faceimage);
faceimage=image(rect)
的区别就是如此
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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),前者是类似于拷贝函数,后者则是类似与引用,个人认为是种错误

本文作者:durtime

本文链接:https://www.cnblogs.com/durtime/p/16255753.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   durtime  阅读(445)  评论(0编辑  收藏  举报
历史上的今天:
2021-05-10 团队开发day09
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开