OpenCV学习笔记(三)

漫水填充

函数原型

//版本一
int floodFill(InputOutputArray image, InputOutputArray mask, Point seedPoint,Scalar newVal,Rect*rect=0,Scalar loDiff = Scalar(), int flags=4)
//版本二
int floodFill(InputOutputArray image, InputOutputArray mask, Point seedPoint,Scalar newVal,Rect*rect=0,Scalar loDiff = Scalar(), int flags=4)

两个版本除第二个参数外,其他参数共用。

  1. 第一个参数,InputOutputArray类型的image,输入输出1通道或3通道,8位或浮点图像,具体参数由之后的参数指明。
  2. 第二个参数,InputOutputArray类型的mask,这是第二个版本的floodFill专有,表示操作掩模。单通道8位,长宽都比输入图像image大两个像素点的图像。第二个版本需要使用以及更新掩模,漫水填充不会填充掩模mask的非零像素区域,掩模mask会比需要填充的图像大,所以mask中与输入图像(x,y)像素点对应点的坐标为(x+1,y+1)。
  3. 第三个参数,Point类型的seedPoint,漫水填充算法的起始点。
  4. 第四个参数,Scalar类型的newVal,像素点被染色的值,即在重绘区域像素的新值。
  5. 第五个参数,Rect*类型的rect,有默认值0,一个可选的参数,用于设置floodFill函数将要重绘区域的最小边界矩形区域。
  6. 第六个参数,Scalar类型的loDiff,有默认值Scalar(),表示当前观察像素值与其部件领域像素值或待加入该部件的种子像素之间的亮度或颜色之负差(lower brightness/color difference)的最大值。
  7. 第七个参数,Scalar类型的upDiff,有默认值Scalar(),表示当前观察像素值与其部件领域像素值或待加入该部件的种子像素之间的亮度或颜色之负差(lower brightness/color difference)的最大值。
  8. 第八个参数,int类型的flags,操作标志符。
#include
#include
#include
using namespace cv;
int main() 
{
	Mat src = imread("1.jpg");
	imshow("[原图]", src);
	Rect ccomp;
	floodFill(src, Point(50, 300), Scalar(155, 255, 55), &ccomp, Scalar(20, 20, 20), Scalar(20, 20, 20));
	imshow("[效果图]", src);
	waitKey(0);
	return 0;
}

OpenCV学习笔记(三)_第1张图片

尺寸调整:resize()函数

函数原型

void resize(InputArray src,OutputArray dst,Size dsize,double fx = 0,double fy = 0,int interpolation = INTER_LINEAR)
  1. 第一个参数,InputArray类型的src,输入图像,Mat类的对象。
  2. 第二个参数,OutputArray类型的dst,输出图像,有dsize的尺寸,或者由src.size()计算而来。
  3. 第三参数,Size类型的dsize,输出图像的大小。如果等于零,由下式计算:dsize = Size(round(fxsrc.cols),round(fysrc.rows))。其中dsize,fx,fy都不为0。
  4. 第四个参数,double类型的fx,沿水平轴的缩放系数,有默认值0,且当其等于0时,由下式计算:(double)dsize.width/src.cols
  5. 第五个参数,double类型fy,沿垂直轴的缩放系数,有默认值0,且当其等于0时,由下式计算:(double)dsize.height/src.rows
  6. 第六个参数,int类型的interpolation,用于指定插值方式,默认为INTER_LINEAR(线性插值)。

可选插值方式:

  • INTER_NEAREST——最近邻插值
  • INTER_LINEAR——线性插值(默认值)
  • INTER_AREA——区域插值(利用像素领域内的双三次插值)
  • INTER_CUBIC——三次样条插值(超过4*4像素领域内的三次插值)
  • INTER_LANCZOS4——Lanczos插值(超过8*8像素领域的Lanczos插值)
#include
#include
#include
using namespace cv;
int main() 
{
	Mat srcImage = imread("1.jpg");
	Mat tmpImage, dstImage1, dstImage2;
	tmpImage = srcImage;
	imshow("[原图]", srcImage);

	resize(tmpImage, dstImage1, Size(tmpImage.cols / 2, tmpImage.rows / 2), (0, 0),(0,0),3);
	resize(tmpImage, dstImage2, Size(tmpImage.cols * 2, tmpImage.rows * 2), (0, 0), (0, 0), 3);
	imshow("[效果图]一", dstImage1);
	imshow("[效果图]二", dstImage2);
	waitKey(0);
	return 0;
}

OpenCV学习笔记(三)_第2张图片

图像金字塔

向上采样:pyrUp()函数
函数原型

void pyrUp(inputArray src, OutputArray dst, const Size&dstsize = Size(),int borderType = BORDER)DEFAULT)
  1. 第三参数,const Size&类型的dstsize,输出图像的大小,默认值Size(),默认情况下,由Size(src.cols2,src.rows2)计算而来,且需满足:
    |dstsize.width-src.cols2|<=(dstsize.width mod2)
    |dstsize.height-src.rows
    2|<=(dstsize.height mod2)
  2. 第四个参数,int类型的borderType,边界模式,一般不用理会。
#include
#include
#include
using namespace cv;
int main()
{
	Mat srcImage = imread("1.jpg");
	Mat tmpImage, dstImage;
	tmpImage = srcImage;
	imshow("[原图]", srcImage);
	pyrUp(tmpImage, dstImage, Size(tmpImage.cols * 2,tmpImage.rows*2));
	imshow("[效果图]", dstImage);
	
	waitKey(0);
	return 0;
}


向下采样:pytDown()函数
函数原型

void pyrDown(intputArray src , OutputArray dst, const Size&dstsize = Size(), int borderType = BORDER_DEFAULT)
  1. 第三个参数,const Size类型的dstsize,输出图像的大小;默认值为Size(),默认情况下由Size Size((src.cols+1)/2,(src.rows+1)/2)来计算,且需满足:
    |dstsize.width2-src.cols|<=2
    |dstsize.height
    2-src.rows|<=2

`#include
#include
#include
using namespace cv;
int main()
{
Mat srcImage = imread(“1.jpg”);
Mat tmpImage, dstImage;
tmpImage = srcImage;
imshow("[原图]", srcImage);
pyrDown(tmpImage, dstImage, Size(tmpImage.cols / 2,tmpImage.rows/2));
imshow("[效果图]", dstImage);

waitKey(0);
return 0;

}`OpenCV学习笔记(三)_第3张图片

你可能感兴趣的:(OpenCV学习笔记,Opencv学习笔记,OpenCV)