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

实现原理

连环画效果可以通过调整RGB三通道数值实现,具体公式:

取计算后的RGB数值平均值作为新图像的B值,取平均值+10的数值作为R值和G值。

计算过程中出现0以下或者255以上的数值,将其调整为0或255。

功能函数代码

// 连环画
cv::Mat ComicStrip(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<uchar>(i);uchar *t = temp.ptr<uchar>(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];// 连环画效果int newB = abs(B - G + B + R)*R / 256;int newG = abs(B - G + B + R)*R / 256;int newR = abs(G - B + G + R)*R / 256;newR = max(0, min(newR, 255));newG = max(0, min(newG, 255));newB = max(0, min(newB, 255));int gray = (newR + newG + newB) / 3;int T = min(255, gray + 10);t[3 * j] = gray;t[3 * j + 1] = T;t[3 * j + 2] = T;}}return temp;
}

C++测试代码

#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;cv::Mat ComicStrip(cv::Mat src);int main()
{cv::Mat src = imread("test2.jpg");cv::Mat gray;cvtColor(src, gray, COLOR_BGR2GRAY);cv::Mat result = ComicStrip(src);cv::imshow("original", src);cv::imshow("gray", gray);cv::imshow("result", result);waitKey(0);return 0;
}// 连环画
cv::Mat ComicStrip(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<uchar>(i);uchar *t = temp.ptr<uchar>(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];// 连环画效果int newB = abs(B - G + B + R)*R / 256;int newG = abs(B - G + B + R)*R / 256;int newR = abs(G - B + G + R)*R / 256;newR = max(0, min(newR, 255));newG = max(0, min(newG, 255));newB = max(0, min(newB, 255));int gray = (newR + newG + newB) / 3;int T = min(255, gray + 10);t[3 * j] = gray;t[3 * j + 1] = T;t[3 * j + 2] = T;}}return temp;
}

测试效果

图1 原图

图2 连环画效果

图3 灰度图

连环画效果完成,有点当年那味了,想念当初一起偷偷看漫画书的学生时代~

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

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

OpenCV-连环画效果(海贼王yyds)相关推荐

  1. OpenCV油画效果

    OpenCV油画效果 油画效果 介绍 代码 结果 油画效果 介绍 图像在颜色空间默认颜色空间COLOR_BGR2GRAY中转换.对于图像中的每个像素,程序都会计算尺寸为2 * size + 1的相邻像 ...

  2. OpenCV~PS效果

    Python-OpenCV-PS油画滤镜效果 opencv 照片动漫风格 实验1:图像的手绘效果

  3. opencv ppt效果_opencv几何图形画法

    opencv几何图形画法 本文目的 目的:学习使用opencv的几何图形画法 语言:java 版本:opencv-410 简介:使用org.opencv.imgproc.Imgproc进行几何图形绘画 ...

  4. Android Studio 配置OpenCV4.4.0 不用安装OpenCV Manager (泪崩居然用了礼拜天2天的时间居然还没配置成功,今天又看了下配置成功了)

    Android Studio 配置OpenCV4.4.0 ,说来惭愧居然用户礼拜天2天的时间呢,期间遇到的问题大致有4个问题 这里我也总结出了最后在列举出来,(可能是新版和之前旧版本不一样的问题按照网 ...

  5. opencv grabcut

    使用openc Grabcut效果与 论文效果差别很大,其实opencv grabcut效果与 graph cut效果是一样的.原因是opencv中没有实现 border mattting后续处理 完 ...

  6. opencv 一堆算法,图像处理等

    http://blog.csdn.net/wangzhebupt/article/category/1675453 数据挖掘十大经典实用算法及OpenCV算法 http://www.xuebuyuan ...

  7. OpenCV:OpenCV图像旋转的代码

    OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...

  8. OpenCV编译安装

    最近重新开始使用opencv-cpp,有些项目需要的是OpenCV2,有些需要多是OpenCV3,这两个版本的如何共存是个值得研究多问题.这里记录一次OpenCV3和2的安装过程. 安装OpenCV3 ...

  9. yolov5训练自己的数据集,OpenCV DNN推理

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4238字,预计阅读9分钟 前言 上一篇<OpenCV--自学笔记>搭建好了yolov5的环境,作为目标检测在应用中 ...

最新文章

  1. 调用webservice 的时候没法输入参数
  2. 几款优秀的jQuery 插件
  3. 横流式冷却塔计算风量_冷却塔空气动力是怎么计算的?
  4. Windows使用技巧
  5. 图说:为什么Java中的字符串被定义为不可变的
  6. java 判断季节,Java-用switch判断季节
  7. 计算机2013知识,【2013年计算机基础知识习题与答案(三)】- 环球网校
  8. 请写出至少五个块级元素_2020高考元素化合物命题特点及复习思路
  9. 高程数据处理_全国12.5米高程 DEM for WeServer 数据1.0
  10. 基于visual Studio2013解决面试题之0504单链表逆序
  11. 强推WordPress里的一款代码高亮插件——EnlighterJS
  12. 活代码LINQ——08
  13. 实战!使用Docker安装OnlyOffice
  14. python爬取贴吧数据_【python】利用requests爬取百度贴吧用户信息
  15. Linux 学习课堂笔记1
  16. python微博评论情感分析_用python对鹿晗、关晓彤微博进行情感分析
  17. PCB设计指南:安规、布局布线、EMC、热设计、工艺
  18. 微信小程序入门与实战笔记
  19. CodeForces 757 E.Bash Plays with Functions(积性函数+dp)
  20. Parsec [error-800] Internet无法访问的解决方案

热门文章

  1. springmvc 的请求处理过程(精编)
  2. Leetcode - Permutations I,II
  3. guava_学习_00_资源帖
  4. #和妹妹一起做毕业设计#从需求到软件发布的流程记录—— 需求、设计篇
  5. javascript动画系列第二篇——磁性吸附
  6. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容...
  7. 为什么我们需要域?MS Active Directory系列之一
  8. Windows 启动方式总结(转)
  9. android mysql代码_LitePal——Android数据库框架完整使用手册(示例代码)
  10. 你爱我,我爱你,IP被封很头疼【Python爬虫实战:ip代理js逆向采集】