OpenCV C++ 简单小技巧 - 图像基础操作 (10

反色

mat = 255-mat;

图像自定义区域

final = A({0,0,100,100});

获取图像的rgb分离图

vector mv;
split(final, mv);
final.channels();

只保留其中一种颜色,并叠加回色彩图
mv[0]=Mat::zeros(cv::Size(A.rows, A.cols), CV_8UC1);
mv[0].copyTo(mv[1]);
merge(mv,final);

扩展图片

填充固定颜色
copyMakeBorder(final, final, 150, 150, 150, 150, BORDER_CONSTANT,{200,100,50,255});
镜像,无限复制
copyMakeBorder(final, final, 150, 150, 1500, 1500, BORDER_REFLECT);

image.png

BORDER_REFLECT_101 方式主要用于图像能平移

拉伸最后像素
copyMakeBorder(final, final, 150, 150, 1500, 1500, BORDER_REPLICATE);

image.png

连续复制
copyMakeBorder(final, final, 150, 150, 1500, 1500, BORDER_WRAP);

image.png

图片转mat,以及mat转图片

UIImageToMat(img1,A);
MatToUIImage(real);

修改图片尺寸

按像素非等比修改
resize(A, A, cv::Size(500,500));
等比修改
resize(A, A, cv::Size(),.01,.01,INTER_AREA);

纵向拼接两张图片 (可选择区域)

real.push_back(A);
real.push_back(B);
//
real.push_back(A(srcRect1));
real.push_back(B(srcRect2));
image.png
image.png

横向拼接两张图片 (可选择区域)

Mat real(A.rows,A.cols*2,A.type());
A.colRange(0, A.cols).copyTo(real.colRange(0, A.cols));
B.colRange(0, A.cols).copyTo(real.colRange(A.cols,A.cols*2));
image.png
Mat real(A.rows,A.cols,A.type());
A.colRange(0, A.cols/2).copyTo(real.colRange(0, A.cols/2));
//这代码的前两行可简化为 A.copyTo(real);
B.colRange(A.cols/2, A.cols).copyTo(real.colRange(A.cols/2,A.cols));
image.png

你可能感兴趣的:(OpenCV C++ 简单小技巧 - 图像基础操作 (10)