#include
#include
using namespace cv;
Mat src, dst;
int top, bottom, left, right;
int borderType;
const char* window_name = "copyMakeBorder Demo";
RNG rng(12345);
int main(int argc, char** argv)
{
String imageName("C:/usr/opencv-test/Testpictures/sight3.jpg"); // by default
if (argc > 1)
{
imageName = argv[1];
}
src = imread(imageName, IMREAD_COLOR); // Load an image
if (src.empty())
{
printf(" No data entered, please enter the path to an image file \n");
return -1;
}
printf("\n \t copyMakeBorder Demo: \n");
printf("\t -------------------- \n");
printf(" ** Press 'c' to set the border to a random constant value \n");
printf(" ** Press 'r' to set the border to be replicated \n");
printf(" ** Press 'w' to set the border to be wrap \n");
printf(" ** Press 'ESC' to exit the program \n");
namedWindow(window_name, WINDOW_AUTOSIZE);
top = (int)(0.05*src.rows); bottom = (int)(0.05*src.rows);
left = (int)(0.05*src.cols); right = (int)(0.05*src.cols);
dst = src;
imshow(window_name, dst);
for (;;)
{
char c = (char)waitKey(500);
if (c == 27) //ESC
{
break;
}
else if (c == 'c')
{
borderType = BORDER_CONSTANT; //指定像素
}
else if (c == 'r')
{
borderType = BORDER_REPLICATE; //边缘替换
}
else if (c == 'w')
{
borderType = BORDER_WRAP; //用另一边的像素来补偿填充
}
Scalar value(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
copyMakeBorder(src, dst, top, bottom, left, right, borderType, value);
imshow(window_name, dst);
}
return 0;
}
Mat src, dst;
int top, bottom, left, right;
int borderType;
const char* window_name = "copyMakeBorder Demo";
RNG rng(12345);
特殊的注意力值应该是随机数发生器的变量rng。我们用它来生成随机边框颜色,我们将尽快看到。
String imageName("../data/lena.jpg"); // by default
if (argc > 1)
{
imageName = argv[1];
}
src = imread( imageName, IMREAD_COLOR ); // Load an image
if( src.empty() )
{
printf(" No data entered, please enter the path to an image file \n");
return -1;
}
namedWindow(window_name,WINDOW_AUTOSIZE);
top =(int)(0.05 * src.rows); bottom =(int)(0.05 * src.rows);
left =(int)(0.05 * src.cols); right =(int)(0.05 * src.cols);
char c = (char)waitKey(500);
if( c == 27 )
{ break; }
else if( c == 'c' )
{ borderType = BORDER_CONSTANT; }
else if( c == 'r' )
{ borderType = BORDER_REPLICATE; }
else if (c == 'w')
{ borderType = BORDER_WRAP; }//用另一边的像素来补偿填充
Scalar value( rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255) );
与RNG变量rng生成的随机值。该值是随机抽取的数字范围[0,255]
copyMakeBorder(src,dst,top,bottom,left,right,borderType,value);
参数解释:
imshow(window_name,dst);
下面的屏幕截图显示边框如何更改颜色以及BORDER_REPLICATE选项的外观: