实验目的:将任意一张图片按其最长边扩展为正方形图片,使用三通道均值进行常数扩展:
1、Mat实现
//
int expandImg(
const Mat srcImg,
Mat &dstImg)
{
if(!srcImg.data || srcImg.channels()!=3){
cout<<"Can't open srcImg!"<< endl;
return -1;
}
Mat imgClone = srcImg.clone();
Mat blurImg;
Scalar value;
int exSide;
int top, bottom, left, right;
//中值滤波
medianBlur(imgClone, blurImg, 3);
//求得通道均值
IplImage imgTmp = blurImg;
IplImage *blurImgTemp = cvCloneImage(&imgTmp);
CvScalar avgChannels = cvAvg(blurImgTemp);
double avgB = avgChannels.val[0];
double avgG = avgChannels.val[1];
double avgR = avgChannels.val[2];
value = Scalar(avgB, avgG, avgR);
//按最长边计算左右或上下待扩充大小
if(srcImg.cols <= srcImg.rows){
top = 0;
bottom = 0;
left = abs(srcImg.rows - srcImg.cols) / 2;
right = abs(srcImg.rows - sr