DrGraph原理示教 - OpenCV 4 功能 - 颜色变幻

2024-01-03 17:44

本文主要是介绍DrGraph原理示教 - OpenCV 4 功能 - 颜色变幻,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

二值化是逐像素处理,而逐像素处理会有很多效果,这主要是给人眼看的,因为像素值的变化,直观的就是图像变化,比如颜色。

颜色变幻处理

OpenCV提供了一些图片,如下:
在这里插入图片描述
粗看是一些风格,细看一下,其实是各行颜色一致,看属性知道图像尺寸为256 * 30。
256是字节宽度,也是各通道取值范围。
所以,可以用查表法直接替代处理,即将上面一张图片作为输入,则各行就将原值的0-255映射成为图片相应列的值。图像尺寸设置为30,其实也无所谓多少行,至少一行就行,不过行数太少了,人看起来就感觉,行数多了,读到计算机内存里面处理也浪费。那就折衷选个30吧。
代码处理,这就看水平了,可以一次性全读入,也可以只读取需要的图片。

   QString colorMapPath = THelper::File::GetPath_Resource() + "colorMap/";QStringList fileNames;THelper::File::BrowseDir(fileNames, colorMapPath, "*.*");if (!COLORMAP_TABLE) {if(fileNames.count() > 0) {COLORMAP_TABLE = new cv::Vec3b[256 * fileNames.count()];BYTE * pDst = (BYTE*)COLORMAP_TABLE;foreach(QString fileName, fileNames) {cv::Mat mat = CvHelper::MatFromFile(fileName);if(mat.cols * mat.channels() == 256 * 3) {memcpy(pDst, mat.data, 256 * 3);pDst += 256 * 3;}}}}

最终的颜色变幻处理逻辑:

// 其它-颜色变幻int paramIndex = 0;FMapIndex = GetParamValue_Int(paramIndex++);    // 0: 变幻颜色Mat tempMat;cvtColor(dstMat, tempMat, COLOR_BGR2GRAY);dstMat = cv::Mat(tempMat.rows, tempMat.cols, CV_8UC3);cv::Vec3b * table = COLORMAP_TABLE + 256 * FMapIndex;BYTE * pTemp = tempMat.data;cv::Vec3b * pDst = (cv::Vec3b*)dstMat.data;for (int row = 0; row < tempMat.rows; ++row)for (int col = 0; col < tempMat.cols; ++col)* pDst++ = table[*pTemp++];

本质上还是逐像素处理,这里是查表法,核心逻辑就是* pDst++ = table[*pTemp++];
这个整明白后,那就可以自己设计一个图片作为查表输入,当然有一点点的美工基础更好。

API函数

OpenCV中,提供了一个applyColorMap函数,具体文档说明:

/** @brief Applies a GNU Octave/MATLAB equivalent colormap on a given image.@param src The source image, grayscale or colored of type CV_8UC1 or CV_8UC3.
@param dst The result is the colormapped source image. Note: Mat::create is called on dst.
@param colormap The colormap to apply, see #ColormapTypes
*/
CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap);

继续查看ColormapTypes定义,可知其系统提供了22种颜色风格。

//! GNU Octave/MATLAB equivalent colormaps
enum ColormapTypes
{COLORMAP_AUTUMN = 0, //!< ![autumn](pics/colormaps/colorscale_autumn.jpg)COLORMAP_BONE = 1, //!< ![bone](pics/colormaps/colorscale_bone.jpg)COLORMAP_JET = 2, //!< ![jet](pics/colormaps/colorscale_jet.jpg)COLORMAP_WINTER = 3, //!< ![winter](pics/colormaps/colorscale_winter.jpg)COLORMAP_RAINBOW = 4, //!< ![rainbow](pics/colormaps/colorscale_rainbow.jpg)COLORMAP_OCEAN = 5, //!< ![ocean](pics/colormaps/colorscale_ocean.jpg)COLORMAP_SUMMER = 6, //!< ![summer](pics/colormaps/colorscale_summer.jpg)COLORMAP_SPRING = 7, //!< ![spring](pics/colormaps/colorscale_spring.jpg)COLORMAP_COOL = 8, //!< ![cool](pics/colormaps/colorscale_cool.jpg)COLORMAP_HSV = 9, //!< ![HSV](pics/colormaps/colorscale_hsv.jpg)COLORMAP_PINK = 10, //!< ![pink](pics/colormaps/colorscale_pink.jpg)COLORMAP_HOT = 11, //!< ![hot](pics/colormaps/colorscale_hot.jpg)COLORMAP_PARULA = 12, //!< ![parula](pics/colormaps/colorscale_parula.jpg)COLORMAP_MAGMA = 13, //!< ![magma](pics/colormaps/colorscale_magma.jpg)COLORMAP_INFERNO = 14, //!< ![inferno](pics/colormaps/colorscale_inferno.jpg)COLORMAP_PLASMA = 15, //!< ![plasma](pics/colormaps/colorscale_plasma.jpg)COLORMAP_VIRIDIS = 16, //!< ![viridis](pics/colormaps/colorscale_viridis.jpg)COLORMAP_CIVIDIS = 17, //!< ![cividis](pics/colormaps/colorscale_cividis.jpg)COLORMAP_TWILIGHT = 18, //!< ![twilight](pics/colormaps/colorscale_twilight.jpg)COLORMAP_TWILIGHT_SHIFTED = 19, //!< ![twilight shifted](pics/colormaps/colorscale_twilight_shifted.jpg)COLORMAP_TURBO = 20, //!< ![turbo](pics/colormaps/colorscale_turbo.jpg)COLORMAP_DEEPGREEN = 21  //!< ![deepgreen](pics/colormaps/colorscale_deepgreen.jpg)
};

运行效果

OpenCV 4 功能 - 颜色变幻

不过,用applyColorMap的话,受到的制约就是只有这22种效果。也许OpenCV 5会更多一些。要想自由的话,还是直接查表处理,那里啥都有。

这篇关于DrGraph原理示教 - OpenCV 4 功能 - 颜色变幻的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/566544

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,