Opencv-图像插值与LUT查找表

这篇具有很好参考价值的文章主要介绍了Opencv-图像插值与LUT查找表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像像素的比较

白色是255,黑色是0

min(InputArray src1,
		InputArray src2,
		OutputArray dst)
max(InputArray src1,
	InputArray src2,
	OutpurArray dst
  • src1:第一个图像矩阵,通道数任意
  • src2:第二个图像矩阵,尺寸和通道数以及数据类型都需要与src1一致
  • dst:保留对应位置较大(较小)灰度值后的图像矩阵,尺寸、通道数和数据类型与src1一致

LUT查找表

LUT查找表实际上就是一种映射规则
lut 插值,1024程序员节

LUT(InputArray src,InputArray lut,OutputArray dst)
src:输入图像矩阵,其数据类型只能是CV_8U
lut:256个像素灰度值的查找表,单通道或者与src通道数相同
dst:输出图像矩阵,其尺寸与src相同,数据类型与lut相同
	//LUT查找表第一层
	uchar lutFirst[256];
	for (int i = 0; i < 256; i++)
	{
		if (i <= 100)
			lutFirst[i] = 0;
		if (i > 100 && i <= 200)
			lutFirst[i] = 100;
		if (i > 200)
			lutFirst[i] = 255;
	}
	Mat lutOne(1, 256, CV_8UC1, lutFirst);

	//LUT查找表第二层
	uchar lutSecond[256];
	for (int i = 0; i < 256; i++)
	{
		if (i <= 100)
			lutSecond[i] = 0;
		if (i > 100 && i <= 150)
			lutSecond[i] = 100;
		if (i > 150 && i <= 200)
			lutSecond[i] = 150;
		if (i > 200)
			lutSecond[i] = 255;
	}
	Mat lutTwo(1, 256, CV_8UC1, lutFirst);
	//LUT查找表第三层
	uchar lutThird[256];
	for (int i = 0; i < 256; i++)
	{
		if (i <= 100)
			lutThird[i] = 100;
		if (i > 100 && i <= 200)
			lutThird[i] = 200;
		if (i > 200)
			lutThird[i] = 255;
	}

	Mat lutThree(1, 256, CV_8UC1, lutThird);

	//拥有三通道的LUT查找表矩阵
	vector<Mat>mergeMats;
	mergeMats.push_back(lutOne);
	mergeMats.push_back(lutTwo);
	mergeMats.push_back(lutThree);

	Mat LutTree;
	merge(mergeMats, LutTree);

	Mat img = imread("2.jpg");
	Mat gray, out0, out1, out2;
	cvtColor(img, gray, COLOR_BGR2GRAY);
	LUT(gray, lutOne, out0);
	LUT(img, lutOne, out1);
	LUT(img, LutTree, out2);
	imshow("out0", out0);
	imshow("out1", out1);
	imshow("out2", out2);
	waitKey(0);

图像尺寸改变

图像插值原理

在日常对图像进行操作的过程中会涉及到图像的放大与缩小,这一系列的操作都是通过插值法来实现的;opencv中resize()函数的实现原理0就是通过插值算法,如果不对应用某种算法进行设置,则默认采用双线性插值算法。
常用插值算法
最近邻法(Nearest Interpolation):计算速度最快,但是效果最差。
双线性插值(Bilinear Interpolation):双线性插值是用原图像中4(22)个点计算新图像中1个点,效果略逊于双三次插值,速度比双三次插值快,属于一种平衡美,在很多框架中属于默认算法。
双三次插值(Bicubic interpolation):双三次插值是用原图像中16(44)个点计算新图像中1个点,效果比较好,但是计算代价过大。
jj’

lut 插值,1024程序员节文章来源地址https://www.toymoban.com/news/detail-828662.html

图像缩放
resize(InputArray src,OutputArray dst,Size dsize,double fx=0,double fy=0,int interpolation = INTER_LINEAR)
dsize:输出图像的尺寸 
fx:水平轴的比例因子:如果将水平轴变为原来的两倍,则赋值为2
fy:垂直轴的比例因子
interpolation:插值方法的标志

图像翻转
filp(InputArray src,OutputArray dst,int flipCode)
flipCode:翻转方式标志,数值大于0表示绕y轴进行翻转;数值等于0,表示绕x轴进行翻转,数值小于0表示绕两个轴旋转
图像拼接
//横向拼接要求高度一致
hconcat(InputArray src1,InputArray src2,OutputArray dst)
//垂直拼接要求宽度一致
vconcat(InputArray src1,InputArray src2,OutputArray dst) 
	Mat img = imread("2.jpg");
	Mat out,out1,out2,out3;
	// 缩小
	resize(img, out, Size(500,500),0, 0, INTER_AREA);
	// 最近邻插值
	resize(img, out1, Size(200, 200), 0, 0, INTER_NEAREST);
	//双线性插值
	resize(img, out2, Size(200, 200), 0, 0, INTER_LINEAR);
	//双三次插值
	resize(img, out3, Size(200, 200), 0, 0, INTER_CUBIC);
	
	Mat img_x, img_y, img_xy;
	flip(img, img_x, 0); //沿x轴对称翻转
	flip(img, img_y, 1); //沿y轴对称翻转
	flip(img, img_xy, -1);//沿x轴对称,再y轴对称

到了这里,关于Opencv-图像插值与LUT查找表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LUT 查找表(Look-Up-Table)

            LUT就是查找表,对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们在FPGA设计中可以用LUT组建分布式的RAM。         如果用传统的逻辑来实现一个4输入的逻辑电路,需要大致三个步骤:1、看真值表找出输入与输出之间

    2024年02月16日
    浏览(35)
  • FPGA结构:LUT(查找表)和 MUX(多路选择器)介绍

    如果你想学习有关FPGA的专业术语,可以参考这一篇:FPGA专业术语介绍 一句话概括,通过将函数的真值表存放在少量内存单元中来实现组合逻辑电路功能的模块称为LUT。 这里以简单的一个3-LUT(3输入查找表)为例,以下给出其示意图的简化描述: 输入1 ----┐ 输入2 ----┼---

    2024年02月04日
    浏览(49)
  • FPGA原理与结构(2)——查找表LUT(Look_Up_Table)

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、查找表(LUT)概述 二、LUT的性能权衡 1、面积效率 2、速度问题 3、权衡结果  三、LUT的组成与应用 1、LUT的组成         2、LUT的应用 3、LUT应用拓展  本文参考xilinx官方手册ug474:ug474         LUT是CLB的重要组成

    2024年02月08日
    浏览(37)
  • 【opencv】颜色映射表操作-applyColorMap()和LUT()函数使用介绍

    来自:ColorMaps in OpenCV。 人眼对颜色的变化更敏感,所以当一张灰度图的细微变化不是很明显时,可以对灰度图重新着色。 opencv提供函数 applyColorMap() 实现这种功能。其内部算法基本是查表法LUT实现,首先构建查找表,然后应用查找表。应用表的过程类似: d s t ( i , j ) = L U

    2024年02月11日
    浏览(38)
  • FPGA资源之LUT

      Xilinx 7的FPGA可编程逻辑资源为CLB(Configurable Logic Block)   下图白色高亮为CLB资源:   在Xilinx的FPGA中,这样的CLB资源有很多个,组成可编程逻辑阵列;   我们看到在CLB资源中,还有两个区域如下图:   这些资源统称为SLICE,一个CLB中有两个SLICE,当然这两个SLICE片在

    2024年01月18日
    浏览(41)
  • 3D LUT 滤镜 shader 源码分析

    最近在做滤镜相关的渲染学习,目前大部分 LUT 滤镜代码实现都是参考由 GPUImage 提供的 LookupFilter 的逻辑,整个代码实现不多。参考网上的博文也有各种解释,参考了大量博文之后终于理解了,所以自己重新整理了一份,方便以后阅读理解,对整体代码的实现过程结合LUT的原

    2024年02月06日
    浏览(46)
  • FPGA原理介绍 (CLB, LUT, 进位链, 存储元素, RAM)

    本文首先对 ASIC 和 FPGA 进行了一个对比,然后介绍了 FPGA 的基本结构,最后解释了 FPGA 实现可编程的基本原理。 这里先给出 ASIC 和 FPGA 的优缺点 ASIC FPGA 优点 性能优越 可靠性高 大批量下单位成本低 开发初期无投入资金壁垒 设计工具使用方便,设计简单快速 产品原型机开发

    2024年02月20日
    浏览(38)
  • FPGA的可编程逻辑单元(LUT和寄存器)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 1.根据PLD器件单片集成度的高低,可将PLD分为低密度可编程逻辑器件和高密度可编程逻辑器件。 2.按器件结构类型划分      

    2024年02月19日
    浏览(50)
  • 1024 程序员节,圆一个小小的梦

    Hope is a good thing, maybe the best of things, and no good thing ever dies. 希望是件美丽的东西,也许是最好的东西,而美好的东西是永远不会消逝的。 大家好,我是勇哥 。 1024 , 程序员节,圆了我一个小小的梦。 花了半年时间,我写了一本电子书 ,书名是:《 RocketMQ4.X设计精要 》,我想

    2024年02月08日
    浏览(66)
  • 程序员帮助程序员!用1024拼出更美好的云计算未来

    中国的云计算市场是全球增长最快的。据预测,中国公共云服务市场的全球份额将从 2020 年的 6.5% 增加到 2024 年的 10.5% 以上。 伴随行业的迅速发展,催生了云计算相关人才需求的井喷增长,供需矛盾凸显。据德意志银行分析报告,越来越多IT企业关闭了线下IDC,开始把业务迁

    2024年02月16日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包