opencv学习笔记(五)重映射及仿射变换
来源:互联网 发布:最好的播放器 知乎 编辑:程序博客网 时间:2024/05/29 03:18
重映射
cv::Mat src = cv::imread("1.jpg"); if (!src.data) { cout << "error" << endl; return -1; } cv::Mat dst,map_x,map_y; //创建和原始图一样的效果图,x重映射图,y重映射图 dst.create(src.size(), src.type()); map_x.create(src.size(), CV_32FC1); map_y.create(src.size(), CV_32FC1); //双层循环,遍历每一个像素点,改变map_x&map_y的值 for (int j = 0; j < src.rows; j++) { for (int i = 0; i < src.cols; i++) { // 改变map_x&map_y的值 map_x.at<float>(j, i) = static_cast<float>(i); map_y.at<float>(j, i) = static_cast<float>(src.rows - j); } } //进行重映射操作 remap(src,//输入图像,需为单通道8位或浮点型图像 dst, //输出图像 map_x, //表示点(x,y)的第一个映射或表示CV_16SC2、CV_32FC1或CV_32FC2类型的X值 map_y, //表示CV_16UC1、CV_32FC1类型的Y值 CV_INTER_LINEAR, //插值方式 cv::BORDER_CONSTANT); //边界模式 cv::imshow("原图", src); cv::imshow("remap 效果图", dst);
仿射变换
cv::Mat src = cv::imread("1.jpg"); if (!src.data) { cout << "error" << endl; return -1; } //定义两组点,代表两个三角形 cv::Point2f srcTriangle[3]; cv::Point2f dstTriangle[3]; //定义一些Mat变量 cv::Mat rotMat(2, 3, CV_32FC1); cv::Mat warpMat(2, 3, CV_32FC1); cv::Mat dstImage_warp, dstImage_warp_rotate; dstImage_warp = cv::Mat::zeros(src.rows, src.cols, src.type()); //设置源图像和目标图像上的三组点以计算仿射变换 srcTriangle[0] = cv::Point2f(0, 0); srcTriangle[1] = cv::Point2f(static_cast<float>(src.cols - 1), 0); srcTriangle[2] = cv::Point2f(0, static_cast<float>(src.rows - 1)); dstTriangle[0] = cv::Point2f(static_cast<float>(src.cols*0.0), static_cast<float>(src.rows*0.33)); dstTriangle[1] = cv::Point2f(static_cast<float>(src.cols*0.65), static_cast<float>(src.rows*0.35)); dstTriangle[2] = cv::Point2f(static_cast<float>(src.cols*0.15), static_cast<float>(src.rows*0.6)); //求得仿射变换 warpMat = cv::getAffineTransform(srcTriangle, dstTriangle); //对源图像应用刚刚求得的仿射变换 cv::warpAffine(src, //输入图像 dstImage_warp, //输出图像 warpMat, //2*3的变换矩阵 dstImage_warp.size());//输出图像的尺寸,默认为线性插值 //对图像进行缩放后再旋转 // 计算绕图像中点顺时针旋转50度缩放因子为0.6的旋转矩阵 cv::Point center = cv::Point(dstImage_warp.cols / 2, dstImage_warp.rows / 2); double angle = -50.0; double scale = 0.6; // 通过上面的旋转细节信息求得旋转矩阵 rotMat = getRotationMatrix2D(center, angle, scale); // 旋转已缩放后的图像 cv::warpAffine(dstImage_warp, dstImage_warp_rotate, rotMat, dstImage_warp.size()); cv::imshow("原图", src); cv::imshow("Warp 效果图", dstImage_warp); cv::imshow("Warp和Rotate 效果图", dstImage_warp_rotate);
阅读全文
0 0
- opencv学习笔记(五)重映射及仿射变换
- 【OpenCV】重映射及仿射变换
- OpenCV学习笔记(九) 重映射、仿射变换
- OpenCV学习记录3//仿射变换与重映射
- OpenCV 重映射、仿射变换
- opencv中关于重映射和仿射变换
- 学习OpenCV范例(十六)——重映射和仿射变换
- 学习OpenCV范例(十六)——重映射和仿射变换
- opencv-第六章-图像变换-重映射、仿射变换、透视变换
- OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换
- Opencv图像识别从零到精通(30)---重映射,仿射变换
- opencv学习笔记:由三对点计算仿射变换
- Opencv学习笔记——仿射变换
- 【OpenCV学习笔记】7.4仿射变换warpAffine()
- OpenCV Python 学习笔记(三) 仿射变换
- 仿射变换及OpenCV实现
- opencv笔记3:仿射变换
- 图像处理之重映射、仿射和透射变换
- appium-开启虚拟器&安装测试软件
- PythonStock(10):使用notebook + tushare + pandas 简单的股票分析,蜡烛图
- 几种离散随机变量
- 异常问题集合<第一讲>
- ipython开发工具Jupyter Notebook安装
- opencv学习笔记(五)重映射及仿射变换
- 支持向量机的理解
- HDU 2055 An easy problem(关于这道题中的一些小问题希望大家了解)
- 开发微信公众号遇到的一些问题
- 数据库日期格式转换
- hadoop运行在kylin(ubuntu)上,造成ssh断开,机器中断
- vector按存储的结构体的某一字段排序
- Android Android自定义的下拉列表框控件
- 飞翔的小鸟