opencv gamma校正_opencv resize函数踩坑

opencv gamma校正_opencv resize函数踩坑//链接https://blog.csdn.net/linqianbi/article/details/78617615//Gamma校正#include<iostream>#include<opencv2\core\core.hpp>#include<opencv2\highgui\highgui.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<cm…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

// 链接 https://blog.csdn.net/linqianbi/article/details/78617615
// Gamma 校正
#include <iostream>  
#include <opencv2\core\core.hpp>  
#include <opencv2\highgui\highgui.hpp>  
#include <opencv2\imgproc\imgproc.hpp>  
#include<cmath>
using namespace cv;

Mat gammaTransform(Mat& srcImage, float kFactor)
{

	unsigned char LUT[256];
	for (int i = 0; i < 256; i++)
	{
		float f = (i + 0.5f) / 255;
		f = (float)(pow(f, kFactor));
		LUT[i] = saturate_cast<uchar>(f * 255.0f - 0.5f);
	}
	Mat resultImage = srcImage.clone();

	if (srcImage.channels() == 1)
	{

		MatIterator_<uchar> iterator = resultImage.begin<uchar>();
		MatIterator_<uchar> iteratorEnd = resultImage.end<uchar>();
		for (; iterator != iteratorEnd; iterator++)
		{
			*iterator = LUT[(*iterator)];
		}
	}
	else
	{


		MatIterator_<Vec3b> iterator = resultImage.begin<Vec3b>();
		MatIterator_<Vec3b> iteratorEnd = resultImage.end<Vec3b>();
		for (; iterator != iteratorEnd; iterator++)
		{
			(*iterator)[0] = LUT[((*iterator)[0])];//b
			(*iterator)[1] = LUT[((*iterator)[1])];//g
			(*iterator)[2] = LUT[((*iterator)[2])];//r
		}
	}
	return resultImage;
}
int main()
{
	Mat srcImage = imread("test.jpg");
	if (!srcImage.data)
	{
		printf("could not load image...\n");
		return -1;
	}
	//取两种不同的gamma值
	float gamma1 = 3.33f;
	float gamma2 = 0.33f;
	float kFactor1 = 1 / gamma1;
	float kFactor2 = 1 / gamma2;
	Mat result1 = gammaTransform(srcImage, kFactor1);
	Mat result2 = gammaTransform(srcImage, kFactor2);
	namedWindow("demo", CV_WINDOW_AUTOSIZE);
	imshow("srcImage", srcImage);
	imshow("res1", result1);
	imshow("res2", result2);
	imwrite("Gamma.jpg", result1);
	waitKey(0);
	waitKey(0);
	return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192787.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新手上路系列 Web服务器搭建篇——IIS的搭建

    新手上路系列 Web服务器搭建篇——IIS的搭建之前公司产品需要使用到IIS这块,小白入门的自己看着网上的教程,自己摸索着前进…学会走不急着跑,先稳固一下讲讲简单的IISWeb服务器怎么搭,让不太涉及Web的童鞋及自己(温故)快速上手。要学的东西真的是很多,学无止境啊!!不说废话,简单的IIS篇先走起。。一、IIS服务器的搭建1.启用功能:首先,我们以Windows10版系统为例,右击“我的电脑”点击属性,进入Win…

    2022年5月28日
    48
  • java inputstreamreader类详解_inputstreamreader是什么流

    java inputstreamreader类详解_inputstreamreader是什么流java底层从计算机读取的统统都是二进制,所以一开始我们读取的时候都是先简历连接通道,然后将文件数据以字节流的形式读取进入通道。#建立连接Filefile=newFile(“a.txt”);#二进制流的通道。FileInputStreamfileInputStream=newFileInputStream(file);#你想啊,fileInputStr…

    2022年9月26日
    3
  • Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)…

    Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)…

    2021年8月24日
    50
  • 2021 idea激活码最新(破解版激活)

    2021 idea激活码最新(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    75
  • mysql如何做到读写分离_MySQL读写分离如何实现?

    主要说下读写分离,当我们的数据量很大时,数据库服务器的压力变大,这时候我们需要从架构方面来解决这一问题,在一个网站中读的操作很多,写的操作很少,这时候我们需要配置读写分离,把读操作和写操作分离出来,最大程度的利用好数据库服务器。读写分离的实现原理就是在执行SQL语句的时候,判断到底是读操作还是写操作,把读的操作转向到读服务器上(从服务器,一般是多台),写的操作转到写的服务器上(主服务器,一般是一台…

    2022年4月6日
    51
  • java数组详解

    java数组详解1 数组概念同一种类型数据的集合。其实数组就是一个容器。数组的好处可以自动给数组中的元素从0开始编号,方便操作这些元素。格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];示例:int[] arr = new int[5];格式2:

    2022年6月2日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号