OpenCV图像旋转,指定填充背景颜色边界颜色

OpenCV与图像旋转有关的函数:
(1)warpAffine函数
void cv::warpAffine ( InputArray  src,
    OutputArray  dst,
    InputArray  M,
    Size  dsize,
    int  flags = INTER_LINEAR,
    int  borderMode = BORDER_CONSTANT,
    const Scalar &  borderValue = Scalar() 
  )    

Applies an affine transformation to an image.

The function warpAffine transforms the source image using the specified matrix:

dst(x,y)=src(M11x+M12y+M13,M21x+M22y+M23)

when the flag WARP_INVERSE_MAP is set. Otherwise, the transformation is first inverted with cv::invertAffineTransform and then put in the formula above instead of M. The function cannot operate in-place.

Parameters
src input image.
dst output image that has the size dsize and the same type as src .
M 2×3 transformation matrix.
dsize size of the output image.
flags combination of interpolation methods (see cv::InterpolationFlags) and the optional flag WARP_INVERSE_MAP that means that M is the inverse transformation ( dst→src ).
borderMode pixel extrapolation method (see cv::BorderTypes); when borderMode=BORDER_TRANSPARENT, it means that the pixels in the destination image corresponding to the "outliers" in the source image are not modified by the function.
borderValue value used in case of a constant border; by default, it is 0.
中文解释:

C++: void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, intborderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
  InputArray src:输入的图像C++: void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, intborderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
  第1个参数:OutputArray dst:输出的图像 
  第2个参数:InputArray M:透视变换的矩阵
  第3个参数:Size dsize:输出图像的大小
  第4个参数:int flags=INTER_LINEAR:输出图像的插值方法,可以为
            INTER_LINEAR 线性插值;
            INTER_NEAREST 最近邻插值;
            INTER_AREA 区域插值
            INTER_CUBIC 三次条样插值
            CV_WARP_INVERSE_MAP:指定 matrix 是输出图像到输入图像的反变换,因此可以直接用来做象素插值。否则, 函数从 map_matrix 得到反变换。
            CV_WARP_FILL_OUTLIERS:填充所有缩小图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval(fillval
用来填充边界外面的值).

第5个参数:int borderMode:图像边界的处理方式,默认是BORDER_CONSTANT(即指定常数值填充) ,实质上,边界处理类型,该枚举型还有:

Enumerator
BORDER_CONSTANT 

iiiiii|abcdefgh|iiiiiii with some specified i(指定常数填充)

BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh(复制边缘像素填充)

BORDER_REFLECT 

fedcba|abcdefgh|hgfedcb(反射复制边界像素)

BORDER_WRAP

cdefgh|abcdefgh|abcdefg

BORDER_REFLECT_101 

gfedcb|abcdefgh|gfedcba(对称填充,也就是以最边缘像素为轴)

BORDER_TRANSPARENT

uvwxyz|absdefgh|ijklmno

BORDER_REFLECT101 

same as BORDER_REFLECT_101

BORDER_DEFAULT

same as BORDER_REFLECT_101

BORDER_ISOLATED 

do not look outside of ROI

第6个参数:const Scalar& borderValue=Scalar():边界的颜色设置,一般默认是0。

(2)getRotationMatrix2D函数Mat getRotationMatrix2D(Point2f center, double angle, double scale)
参数详解:Point2f center:表示旋转的中心点double angle:表示旋转的角度double scale:图像缩放因子
例子:
int main() {Mat src = imread("D:\\OpencvTest\\test1.jpg");cv::Mat dst;//float scale = 200.0/ src.rows;//缩放因子  //cv::resize(src, src, cv::Size(), scale, scale, cv::INTER_LINEAR);  //旋转角度-20度    double angle = -20;//输出图像的尺寸与原图一样  cv::Size dst_sz(src.cols, src.rows);//指定旋转中心    cv::Point2f center(src.cols / 2., src.rows / 2.);//获取旋转矩阵(2x3矩阵)    cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);//设置选择背景边界颜色:绿色  cv::Scalar borderColor = Scalar(0, 238, 0);cv::warpAffine(src, dst, rot_mat, src.size(), INTER_LINEAR, BORDER_CONSTANT, borderColor);  //cv::warpAffine(src, dst, rot_mat, dst_sz, INTER_LINEAR, BORDER_REPLICATE);//显示旋转效果    cv::imshow("src image ", src);cv::imshow("Rotation Image", dst);waitKey(0);return 0;return 0;
}
运行效果:

改为BORDER_REPLICATE:复制边缘填充,其效果如下:
【尊重原创,转载请注明出处】 http://blog.csdn.net/guyuealian/article/details/77993410
cv::warpAffine(src, dst, rot_mat, dst_sz, INTER_LINEAR, BORDER_REPLICATE);

OpenCV图像旋转,指定填充背景颜色边界颜色相关推荐

  1. OpenCV 图像旋转、平移、缩放

    本文是 OpenCV图像视觉入门之路的第7篇文章,本文详细的进行了图像的缩放 cv2.resize().旋转 cv2.flip().平移 cv2.warpAffine()等操作. OpenCV 图像旋 ...

  2. python opencv 图像旋转

    python opencv 图像旋转 原图 顺时针旋转 代码: import cv2 path = '2.jpg' img = cv2.imread(path,1) trans_img = cv2.t ...

  3. OpenCV:OpenCV图像旋转的代码

    OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...

  4. 经验 | OpenCV图像旋转的原理与技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 01 引言 初学图像处理,很多人遇到的 ...

  5. OpenCV图像旋转的原理与技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自|OpenCV学堂 01 引言 初学图像处理,很多人遇到的第一 ...

  6. opencv图像旋转和翻转,cv2.flip,cv2.rotate

    目录 翻转图像 图像旋转 翻转图像 opencv中使用cv2.filp可以实现图像翻转 def flip(src, flipCode, dst=None) src:输入图像 flipCode:flip ...

  7. OpenCV 图像旋转

    在OpenCV中图像旋转首先根据旋转角度和旋转中心获取旋转矩阵,然后根据旋转矩阵进行变换,即可实现任意角度和任意中心的旋转效果. cv2.getRotationMatrix2D(center, ang ...

  8. opencv 图像旋转_用Dlib和OpenCV还能做什么?这个开源项目实现了驾驶员疲劳检测...

    Dlib 和 OpenCV 这两个库已经在深度学习和人脸识别领域逐渐有了自己的一席之地,基于它们的各种开源项目的越来越多,今天 Gitee 上这个开源项目也是基于 Dlib 和 OpenCV 的,具体 ...

  9. OpenCV图像旋转(cv::rotate)与镜像(cv::flip)

    1.概述 案例:使用OpenCV实现图像的旋转和镜像操作 所用函数:这里主要使用到了两个函数 1.旋转:cv::rotate 2.镜像:cv::flip rotate(InputArray src, ...

最新文章

  1. 安装VMwareTools后虚拟机中的鼠标滚轮无法使用解决办法
  2. 语言模型GPT-2挤牙膏式开源,放出774M预训练模型,称是倒数第二版
  3. docker远程访问TLS证书认证shell
  4. MATLAB图像函数 块和邻域的处理
  5. jsp可以使用iframe_使用 JavaScript object URLs,可以处理图像、音频和视频
  6. 删除JavaScript对象中的元素
  7. GDCM:gdcm::EquipmentManufacturer的测试程序
  8. WPF读写config配置文件
  9. 游戏脚本代码大全_按键精灵】一个很好学的脚本
  10. 机器学习基石01_课程说明
  11. Drools(2):Drools快速入门
  12. Mybatis的联合查询
  13. Intellij IDEA 导入 Maven 项目详细配置以及 IDEA部署和使用过程 (Mac版)
  14. launch参数JAVA_javafx主要方法launch(args)如何工作? - java
  15. 6. Excel 图表制作
  16. codeforces1375G Tree Modification
  17. 企业文化在企业管理中的作用
  18. VR全景开发学习链接Three.js
  19. c语言反三角函数值域,反三角函数值域
  20. 大型网站之存储瓶颈(数据库的垂直拆分)

热门文章

  1. Linux入门基础分享[一]
  2. kindeditor编辑器和图片上传独立分开的配置细节
  3. IOS零碎技术整理(3)-获取wifi列表
  4. java getcurrentpid
  5. window.open和window.showModalDialog用法
  6. android 一个很漂亮的控件ObservableScrollView(含片段代码和源码)
  7. 伪类、伪元素、锚伪类
  8. PostgreSQL的 initdb 源代码分析之二十三
  9. 教你学会Sql中 ROW_NUMBER的用法
  10. Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本 1