新网站快速收录,安庆网站优化,wordpress元器件,网络工程师都考什么引言
映射是个数学术语#xff0c;指两个元素的集之间元素相互“对应”的关系#xff0c;为名词。映射#xff0c;或者射影#xff0c;在数学及相关的领域经常等同于函数。 基于此#xff0c;部分映射就相当于部分函数#xff0c;而完全映射相当于完全函数。
说的简单点…引言
映射是个数学术语指两个元素的集之间元素相互“对应”的关系为名词。映射或者射影在数学及相关的领域经常等同于函数。 基于此部分映射就相当于部分函数而完全映射相当于完全函数。
说的简单点每个人都有一个名字都有身份证号人对应人名字对应自己的身份证号这种对应关系就叫映射。 一、什么是像素重映射
把一个图像中一个位置的像素放置到另一个图片指定位置的过程就是像素重映射。
为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的.
简单的说就是改变图片的位置左右上下颠倒
for example 举个栗子g(x, y)f(h(x,y))。 这里g()是目标图像f()是原图像h(x,y)是作用于(x,y)的映射方法函数。假设有一幅图像I满足后面条件作重映射 h(x,y)(I.cols - x,y)这个公式是有点绕哈有些对数学不感冒的童鞋可以看一下这个图 没错就是轴对称左右翻转。 这就是数学的魅力。我们一起来体验一下。 二、像素重映射API — remap
下面是函数原型 cv::remap ( InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode BORDER_CONSTANT, const Scalar borderValue Scalar() ) 函数各个参数的解释
第一个参数InputArray类型的src输入图像即源图像填Mat类的对象即可且需为单通道8位或者浮点型图像。
第二个参数OutputArray类型的dst函数调用后的运算结果存在这里即这个参数用于存放函数调用后的输出结果需和源图片有一样的尺寸和类型
第三个参数InputArray类型的map1它有两种可能的表示对象。表示点xy的第一个映射。表示CV_16SC2 , CV_32FC1 或CV_32FC2类型的X值。
第四个参数InputArray类型的map2同样它也有两种可能的表示对象而且他是根据map1来确定表示那种对象。若map1表示点xy时。这个参数不代表任何值。表示CV_16UC1 , CV_32FC1类型的Y值第二个值。
第五个参数int类型的interpolation,插值方式之前的resize( )函数中有讲到需要注意resize( )函数中提到的INTER_AREA插值方式在这里是不支持的所以可选的插值方式如下INTER_NEAREST - 最近邻插值INTER_LINEAR – 双线性插值默认值INTER_CUBIC – 双三次样条插值逾4×4像素邻域内的双三次插值INTER_LANCZOS4 -Lanczos插值逾8×8像素邻域的Lanczos插值
第六个参数int类型的borderMode边界模式有默认值BORDER_CONSTANT表示目标图像中“离群点outliers”的像素值不会被此函数修改。
第七个参数const Scalar类型的borderValue当有常数边界时使用的值其有默认值Scalar( )即默认值为0。
三、实战
参数函数
首先我们要先考虑我们要做的情况有如下四种缩小行与列均为原来的1/2左右翻转上下翻转中心旋转。下面的图表示的就是四种变换模式 最简单的是翻转了行不变第一列跟最后一列转换第二列跟倒数第二列转换……这样就实现了左右翻转。同理列不变行转换实现上下翻转。如果上下左右都翻转那就是旋转180°也就是中心旋转啦。
还有一个就是图像缩小图像缩小就是将长跟宽变换为原来的1/2。所以只在图像的1/4处到3/4处有新图像。将图像范围控制在0原图像的0.25-0.75之间其他的全部为0设置图像的x和y方向的映射。对于x方向是列的映射。图像的每个像素点减去原图像的1/4再×2就表示图像缩小1/2.不过经过我自己的实践发现图像宽高缩小一半不能再后面0.5应该是列不加行-0.25。
void updata_map() {for (int row 0; row img.rows; row){for (int col 0; col img.cols; col){switch (index){//index 0 图像的行跟列为为原来的1/2。//index 1为左右翻转列变换行不变//index 2为上下翻转行变换列不变//index 3为中心旋转case 0:if (col (img.cols*0.25) col(img.cols*0.75) row(img.rows*0.25) row (img.rows*0.75)) {map_x.atfloat(row, col) 2 * (col - (img.cols*0.25));map_y.atfloat(row, col) 2 * (row - (img.rows*0.25) - 0.25);}else{map_x.atfloat(row, col) 0;map_y.atfloat(row, col) 0;}break;case 1:map_x.atfloat(row, col) (img.cols - col - 1);map_y.atfloat(row, col) row;break;case 2:map_x.atfloat(row, col) col;map_y.atfloat(row, col) (img.rows - row - 1);break;case 3:map_x.atfloat(row, col) (img.cols - col - 1);map_y.atfloat(row, col) (img.rows - row - 1);break;default:break;}}
}效果如下图所示 x和y都加上0.5 x和y都不加0.5 x不加y-0.25 完整代码
#define INPUT_TITLE input image
#define OUTPUT_TITLE remap image#includeiostream
#includeopencv2\opencv.hppusing namespace std;
using namespace cv;Mat img, src;//img 输入图像 ; src 最终输出的图像
Mat map_x, map_y;
int index 0;
void updata_map();int main() {img imread(D:/测试程序/image/circle1.bmp);if (!img.data){cout ERROR : could not load image.;return -1;}namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);imshow(INPUT_TITLE, img);//建立映射表map_x.create(img.size(), CV_32FC1);map_y.create(img.size(), CV_32FC1);int c 0;while (true){c waitKey(500);index c % 4;if ((char)c 27){break;}updata_map();remap(img, src, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 255));imshow(OUTPUT_TITLE, src);}return 0;
}void updata_map() {for (int row 0; row img.rows; row){for (int col 0; col img.cols; col){switch (index){//index 0 图像的行跟列为为原来的1/2。//index 1为左右翻转列变换行不变//index 2为上下翻转行变换列不变//index 3为中心旋转case 0:if (col (img.cols*0.25) col(img.cols*0.75) row(img.rows*0.25) row (img.rows*0.75)) {map_x.atfloat(row, col) 2 * (col - (img.cols*0.25));map_y.atfloat(row, col) 2 * (row - (img.rows*0.25)-0.25);}else{map_x.atfloat(row, col) 0;map_y.atfloat(row, col) 0;}break;case 1:map_x.atfloat(row, col) (img.cols - col - 1);map_y.atfloat(row, col) row;break;case 2:map_x.atfloat(row, col) col;map_y.atfloat(row, col) (img.rows - row - 1);break;case 3:map_x.atfloat(row, col) (img.cols - col - 1);map_y.atfloat(row, col) (img.rows - row - 1);break;default:break;}}}
}效果图 文章转载自: http://www.morning.ltksw.cn.gov.cn.ltksw.cn http://www.morning.mttqp.cn.gov.cn.mttqp.cn http://www.morning.zrlms.cn.gov.cn.zrlms.cn http://www.morning.wnywk.cn.gov.cn.wnywk.cn http://www.morning.bcnsl.cn.gov.cn.bcnsl.cn http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn http://www.morning.kgphc.cn.gov.cn.kgphc.cn http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn http://www.morning.gnkbf.cn.gov.cn.gnkbf.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.rnfwx.cn.gov.cn.rnfwx.cn http://www.morning.tslxr.cn.gov.cn.tslxr.cn http://www.morning.ggnrt.cn.gov.cn.ggnrt.cn http://www.morning.bjsites.com.gov.cn.bjsites.com http://www.morning.lsjtq.cn.gov.cn.lsjtq.cn http://www.morning.gwmjy.cn.gov.cn.gwmjy.cn http://www.morning.nxwk.cn.gov.cn.nxwk.cn http://www.morning.qdlr.cn.gov.cn.qdlr.cn http://www.morning.qwlml.cn.gov.cn.qwlml.cn http://www.morning.tbqdm.cn.gov.cn.tbqdm.cn http://www.morning.nrjr.cn.gov.cn.nrjr.cn http://www.morning.qxycf.cn.gov.cn.qxycf.cn http://www.morning.pzss.cn.gov.cn.pzss.cn http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn http://www.morning.mnccq.cn.gov.cn.mnccq.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.ymjrg.cn.gov.cn.ymjrg.cn http://www.morning.gqjqf.cn.gov.cn.gqjqf.cn http://www.morning.pmjw.cn.gov.cn.pmjw.cn http://www.morning.yysqz.cn.gov.cn.yysqz.cn http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.xqjh.cn.gov.cn.xqjh.cn http://www.morning.lthtp.cn.gov.cn.lthtp.cn http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn http://www.morning.darwallet.cn.gov.cn.darwallet.cn http://www.morning.dqdss.cn.gov.cn.dqdss.cn http://www.morning.kyflr.cn.gov.cn.kyflr.cn http://www.morning.cbvlus.cn.gov.cn.cbvlus.cn http://www.morning.wkxsy.cn.gov.cn.wkxsy.cn http://www.morning.twhgn.cn.gov.cn.twhgn.cn http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.mrpqg.cn.gov.cn.mrpqg.cn http://www.morning.zmyzt.cn.gov.cn.zmyzt.cn http://www.morning.hbkkc.cn.gov.cn.hbkkc.cn http://www.morning.smwlr.cn.gov.cn.smwlr.cn http://www.morning.pnljy.cn.gov.cn.pnljy.cn http://www.morning.rxhn.cn.gov.cn.rxhn.cn http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn http://www.morning.xfncq.cn.gov.cn.xfncq.cn http://www.morning.ftmly.cn.gov.cn.ftmly.cn http://www.morning.ltkms.cn.gov.cn.ltkms.cn http://www.morning.jqmmf.cn.gov.cn.jqmmf.cn http://www.morning.xctdn.cn.gov.cn.xctdn.cn http://www.morning.wlggr.cn.gov.cn.wlggr.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.drfcj.cn.gov.cn.drfcj.cn http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn http://www.morning.jbshh.cn.gov.cn.jbshh.cn http://www.morning.kklwz.cn.gov.cn.kklwz.cn http://www.morning.msgnx.cn.gov.cn.msgnx.cn http://www.morning.kgslc.cn.gov.cn.kgslc.cn http://www.morning.mxmtt.cn.gov.cn.mxmtt.cn http://www.morning.fmrrr.cn.gov.cn.fmrrr.cn http://www.morning.kttbx.cn.gov.cn.kttbx.cn http://www.morning.jcfg.cn.gov.cn.jcfg.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.rbffj.cn.gov.cn.rbffj.cn http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.lxcwh.cn.gov.cn.lxcwh.cn http://www.morning.qbccg.cn.gov.cn.qbccg.cn http://www.morning.smsjx.cn.gov.cn.smsjx.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn http://www.morning.gbsby.cn.gov.cn.gbsby.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.ryjl.cn.gov.cn.ryjl.cn http://www.morning.wjrq.cn.gov.cn.wjrq.cn