资讯专栏INFORMATION COLUMN

OpenCV-怀旧色滤镜

Tony_Zby / 3031人阅读

摘要:作者版权声明著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处实现原理怀旧色可以通过调整三通道数值实现,具体公式功能函数代码怀旧色怀旧调色测试代码怀旧色怀旧调色测试效果图原图图怀旧色滤镜图灰度图怀旧色滤镜完成,与

作者:Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

实现原理

       怀旧色可以通过调整RGB三通道数值实现,具体公式:

功能函数代码

// 怀旧色cv::Mat Nostalgic(cv::Mat src){	CV_Assert(src.channels() == 3);	int row = src.rows;	int col = src.cols;	cv::Mat temp = src.clone();	for (int i = 0; i < row; ++i)	{		uchar *s = src.ptr(i);		uchar *t = temp.ptr(i);		for (int j = 0; j < col; ++j)		{			int B = s[3 * j];			int G = s[3 * j + 1];			int R = s[3 * j + 2];			// 怀旧调色			float newB = 0.272f*R + 0.534f*G + 0.131f*B;			float newG = 0.349f*R + 0.686f*G + 0.168f*B;			float newR = 0.393f*R + 0.769f*G + 0.189f*B;			if (newB < 0)				newB = 0;			if (newB > 255)				newB = 255;			if (newG < 0)				newG = 0;			if (newG > 255)				newG = 255;			if (newR < 0)				newR = 0;			if (newR > 255)				newR = 255;			t[3 * j] = (uchar)newB;			t[3 * j + 1] = (uchar)newG;			t[3 * j + 2] = (uchar)newR;		}	}	return temp;}

C++测试代码

#include #include using namespace std;using namespace cv;cv::Mat Nostalgic(cv::Mat src);int main(){	cv::Mat src = imread("test2.jpg");	cv::Mat result1 = Nostalgic(src);    cv::Mat gray;	cvtColor(src, gray, COLOR_BGR2GRAY);	cv::imshow("original", src);    cv::imshow("gray", gray);	cv::imshow("result", result);	waitKey(0);	return 0;}// 怀旧色cv::Mat Nostalgic(cv::Mat src){	CV_Assert(src.channels() == 3);	int row = src.rows;	int col = src.cols;	cv::Mat temp = src.clone();	for (int i = 0; i < row; ++i)	{		uchar *s = src.ptr(i);		uchar *t = temp.ptr(i);		for (int j = 0; j < col; ++j)		{			int B = s[3 * j];			int G = s[3 * j + 1];			int R = s[3 * j + 2];			// 怀旧调色			float newB = 0.272f*R + 0.534f*G + 0.131f*B;			float newG = 0.349f*R + 0.686f*G + 0.168f*B;			float newR = 0.393f*R + 0.769f*G + 0.189f*B;			if (newB < 0)				newB = 0;			if (newB > 255)				newB = 255;			if (newG < 0)				newG = 0;			if (newG > 255)				newG = 255;			if (newR < 0)				newR = 0;			if (newR > 255)				newR = 255;			t[3 * j] = (uchar)newB;			t[3 * j + 1] = (uchar)newG;			t[3 * j + 2] = (uchar)newR;		}	}	return temp;}

测试效果

图1 原图
图2 怀旧色滤镜
图3 灰度图

       怀旧色滤镜完成,与灰度图相比,有种古典萧瑟的感觉~

       如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/118838.html

相关文章

  • 【网易云信】浅谈视频直播 iOS 端技术

    摘要:目前视频的采集源主要来自摄像头采集屏幕录制从视频文件读取推流。音视频处理前处理模块也是主观影响主播观看效果最主要的环节。用户停止直播,反初始化,销毁线程。跳帧可以有效的解决用户在网络不好的情况下,直播卡顿的问题。 随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字、图片无法满足人们对视觉的需求,因此视频直播应运而生。承载了实时性Real-Time和交互性的直播云服务是直...

    xiyang 评论0 收藏0
  • 【网易云信】浅谈视频直播 iOS 端技术

    摘要:目前视频的采集源主要来自摄像头采集屏幕录制从视频文件读取推流。音视频处理前处理模块也是主观影响主播观看效果最主要的环节。用户停止直播,反初始化,销毁线程。跳帧可以有效的解决用户在网络不好的情况下,直播卡顿的问题。 随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字、图片无法满足人们对视觉的需求,因此视频直播应运而生。承载了实时性Real-Time和交互性的直播云服务是直...

    xfee 评论0 收藏0
  • 【网易云信】浅谈视频直播 iOS 端技术

    摘要:目前视频的采集源主要来自摄像头采集屏幕录制从视频文件读取推流。音视频处理前处理模块也是主观影响主播观看效果最主要的环节。用户停止直播,反初始化,销毁线程。跳帧可以有效的解决用户在网络不好的情况下,直播卡顿的问题。 随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字、图片无法满足人们对视觉的需求,因此视频直播应运而生。承载了实时性Real-Time和交互性的直播云服务是直...

    Channe 评论0 收藏0
  • 视频直播技术之iOS端推流

    摘要:网易云信推出一系列文章,对视频直播技术进行深入讲解,本篇文章将向大家介绍端的推流技术。目前视频的采集源主要来自摄像头采集屏幕录制从视频文件读取推流。音视频处理前处理模块也是主观影响主播观看效果最主要的环节。音视频发送推流使用的流媒体协议是。 随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字、图片无法满足人们对视觉的需求,因此视频直播应运而生。承载了实时性Real-Ti...

    Youngdze 评论0 收藏0
  • canvas学习和滤镜实现

    摘要:最近学习了中的重头戏。其繁多,这次主要学习常用的,并且完成以下两个代码实现去色滤镜实现负色反色滤镜欢迎入群。其中,和是圆心坐标,是半径。而和的单位是弧度制。什么是更多滤镜实现去色效果去色效果去色效果相当于就是老旧相机拍出来的黑白照片。 最近学习了 HTML5 中的重头戏--canvas。利用 canvas,前端人员可以很轻松地、进行图像处理。其 API 繁多,这次主要学习常用的 API,并且...

    cheng10 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<