首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。