首页 > 代码库 > OpenCV官方文档学习记录(12)

OpenCV官方文档学习记录(12)

构建边界;

因为做图像卷积的时候在图片边缘的像素按照公式是无法计算的,因此需要在边缘构建边界进行计算;

在opencv中构建边界的函数是:copyMakeBorder(src,dst,top,bottom,left,right,borderType,values);

 

先来代码:

 1 #include<opencv2/opencv.hpp> 2 #include<iostream> 3 #include<string> 4  5 using namespace std; 6 using namespace cv; 7  8 int main(int argc,char **argv) 9 {10     if((argc-2)!=0)11     {12         cout<<"Usage: ./makeBorder \"image_name\""<<endl;13         return 0;14     }15 16     Mat src=http://www.mamicode.com/imread(argv[1]);17     if(src.empty())18     {19         cout<<"Has not found image"<<endl;20         return -1;21     }22 23     namedWindow("Src",CV_WINDOW_AUTOSIZE);24     imshow("Src",src);25 26     Mat dst;27     RNG rng(12345);28     Scalar values;29     int top;30     int bottom;31     int left;32     int right;33     char c;34     int borderType;35 36     top=(int)(0.05*src.rows);37     bottom=(int)(0.05*src.rows);38     left=(int)(0.05*src.cols);39     right=(int)(0.05*src.rows);40 41     while(true)42     {43         c=waitKey(500);44         if((char)c==27)45             break;46         //borderType=BORDER_CONSTANT;47         borderType=BORDER_REPLICATE;48         values=Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));49         copyMakeBorder(src,dst,top,bottom,left,right,borderType,values);50 51         namedWindow("Dst",CV_WINDOW_AUTOSIZE);52         imshow("Dst",dst);53     }54 55     waitKey();56     return 0;57 }

 

同样的CMakeLists.txt

1 cmake_minimum_required(VERSION 2.8)2 project( makeBorder.cpp )3 find_package( OpenCV REQUIRED )4 add_executable( makeBorder makeBorder.cpp )5 target_link_libraries( makeBorder ${OpenCV_LIBS} )

 

将borderype类型分别取值时,结果分别是:

 

可以看出两个参数不同在于,前者是使用自行构建的像素进行填充,后者是将边缘像素拓展。当然,看上去是后者比较好看。

 

函数参数的说明就不多叙了,字面上可以自己理解。

 

以上。

OpenCV官方文档学习记录(12)