昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 1043|回复: 0
收起左侧

利用OpenCV的函数LUT()对矩阵的数据进行查表映射

[复制链接]

249

主题

252

帖子

976

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
976
昊虹君 发表于 2022-12-2 09:03 | 显示全部楼层 |阅读模式
利用OpenCV的函数LUT()对矩阵的数据进行查表映射

LUT是Look Up Table 的缩写,意为查表映射。

OpenCV的函数LUT()能实现图像灰度值或者说矩阵元素值的查表映射功能。

函数LUT()的C++原型如下:
  1. void cv::LUT(InputArray src,
  2.              InputArray lut,
  3.              OutputArray dst)
复制代码

函数LUT()的Python原型如下:
  1. dst=cv.LUT(src, lut[, dst])
复制代码

第一个参数src仅支持8位的数据,但可以是多通道的图像。

第二个参数lut是一个1×256的矩阵,其中存放着每个灰度值经过映射后的数值,可以是单通道的图像或者与第一个参数具有相同的通道数。
如果第二个参数是单通道图像,则src中的每个通道都按照一个LUT进行映射;
如果第二个参数是多通道图像,则src中的第i个通道按照第二个参数的第i个通道的LUT进行映射。

函数LUT()输出图像或矩阵的数据类型与第二个参数lut的数据类型一致。

进行映射操作的时候,原图像或矩阵中的元素值作为lut的索引值,索引对应元素的值作为映射后的新值。

这个函数的使用非常简单,大家看了上面的叙述再结合下面的例子,就能掌握它的使用了。

C++示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;


int main()
{

	cv::Mat A1 = (cv::Mat_<uchar>(3, 3) << 41, 41, 41,
		111, 111, 111,
		240, 240, 240);
	cout << "A1中的数据为:\n" << A1 << endl << endl;

	Mat LUT_1 = Mat::zeros(1, 256, CV_8UC1);

	LUT_1.colRange(0, 100) = 50;
	LUT_1.colRange(100, 200) = 70;
	LUT_1.colRange(200, 256) = 80;

	// cout << "LUT_1中的数据为:\n" << LUT_1 << endl << endl;

	cv::Mat B1;
	LUT(A1, LUT_1, B1);

	cout << "A1中的数据经查表映射后为:\n" << B1 << endl << endl;


	return(0);
}

运行结果如下:

Python示例代码如下:
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术

# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询

# OpenCV的版本为4.4.0

import numpy as np
import cv2 as cv

if __name__ == '__main__':
    A1 = np.array([[40, 40, 40],
                  [110, 110, 110],
                  [240, 240, 240]], dtype='uint8')

    LUT_1 = np.zeros(256, dtype='uint8')
    LUT_1[0: 100] = 50
    LUT_1[100: 200] = 70
    LUT_1[200:] = 80

    B1 = cv.LUT(A1, LUT_1)

运行结果如下:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2024076726 )

GMT+8, 2024-9-8 13:00 , Processed in 0.022550 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表