最近在做运动检测,需要将RGB通道转换成YIQ通道;
在网上查了很多发现实现的都比较差,现给出RGB转YIQ以及YIQ转回RGB程序

这是RGB转为YIQ的原理

Y代表的是亮度,I、Q是色彩,由于YIQ颜色空间具有能将图像中的亮度分量分离提取出来的优点,所以比较容易在复杂背景下进行运动目标检测

根据变换矩阵,可以比较容易的写出函数—就是一个简单的矩阵相乘

Matx33f rgb2yiq_mat(0.299f, 0.587f, 0.114f,0.596f, -0.274f, -0.322f,0.211f, -0.523f, 0.312f);Matx33f yiq2rgb_mat(1.0f, 0.956f, 0.621f,1.0f, -0.272f, -0.647f,1.0f, -1.106f, 1.703f);Mat rgb2yiq(const Mat& img) {Mat img_out(img.size(), img.type());img_out = img.clone();for (int j = 0; j < img.rows; j++) {for (int i = 0; i < img.cols * 3; i += 3) {Vec3f pixel(img_out.at<float>(j, i + 2), img_out.at<float>(j, i + 1), img_out.at<float>(j, i));pixel = rgb2yiq_mat * pixel;for (int k = 0; k < 3; k++) {img_out.at<float>(j, i + 2 - k) = pixel[k];}}}return img_out;
}Mat yiq2rgb(const Mat& img) {Mat img_out(img.size(), img.type());img_out = img.clone();for (int j = 0; j < img.rows; j++) {for (int i = 0; i < img.cols * 3; i += 3) {Vec3f pixel(img_out.at<float>(j, i + 2), img_out.at<float>(j, i + 1), img_out.at<float>(j, i));pixel = yiq2rgb_mat * pixel;for (int k = 0; k < 3; k++) {if (pixel[k] > 255.0) pixel[k] = 255.0;else if (pixel[k] < 0.0) pixel[k] = 0.0;img_out.at<float>(j, i + 2 - k) = pixel[k];}}}return img_out;
}

rgb2yiq的输入与输出不受限制
给出我的rgb2yiq与matlab的rgb2ntsc的结果图—输入全部为三通道归一化的RGB图

opencv将RGB转成YIQ相关推荐

  1. OpenCV内存方式,将rgb数据压缩成jpg数据

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...

  2. Opencv的RGB到HSV颜色空间转换

    从 RGB 到 HSL 或 HSV 的转换 设 (r, g, b) 分别是一个颜色的红.绿和蓝坐标,它们的值是在 0 到 1 之间的实数.设 max 等价于 r, g 和 b 中的最大者.设 min ...

  3. 用 Python3 OpenCV 将视频转成字符动画

    在介绍如何用 Python3 & OpenCV 将视频转成字符动画之前,先简单的介绍一下 OpenCV 吧,毕竟可能很多小伙伴不太了解: 百度百科: OpenCV是一个基于BSD许可(开源)发 ...

  4. OpenCV中将RGB数组在内存中压缩成JPEG文件

    环境 jpeg库: jpegsr9a  下载地址:http://www.ijg.org/ 编译环境: vs2015 Opencv 3.4.2 一.RGB数组来自BMP文件,直接输出在文件系统上 1.1 ...

  5. 使用OpenCV滑动条写成的简单调色器,实时输出RGB值

    好久没有写博客了,最近在看OpenCV,于是动手写了个简单的RGB调色器,在终端实时输出RGB的值.通过这个程序学习滑动条的使用.程序中主要用到cvCreateTrackbar ,其用法如下: cvC ...

  6. OpenCV实现RGB颜色空间和HSI颜色空间的相互转换

    核心的转换公式: RGB-->HSI 截图来自中科院刘定生老师的<数字图像处理与分析>课件. HSI-->RGB 具体的数学公式参照冈萨雷斯版<数字图像处理(第三版)&g ...

  7. opencv把图片转换成二进制_如何增强图像,然后使用Python和OpenCV将其转换为二进制图像?...

    我创建了一个简单的例子来说明我要做的事情:#!/usr/bin/python #------------------------------------------------------------ ...

  8. opencv处理dicom图像_图像处理|opencv| 利用opencv把照片变换成素描风格

    大家好我是阿猩学长,今天给大家利用图像处理库opencv来把图片转换为素描的风格. 其中利用的编程语言为C++. 话不多说先给大家看看实际的效果图. 原图 处理后的图片 原图 效果图 下面先给大家介绍 ...

  9. 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图

    一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间 所需函数: 1.cvCvtColor 函数功能:颜色空间转换 函数原型: void cvCvtColor( const CvAr ...

  10. opencv分离RGB三通道

    注:本文非标准教程,仅是总结个人学习过程,可能存在纰漏,如有错误之处欢迎留言告知,非常感谢 本文用RGB通道来改变图像颜色. #include <iostream> #include &l ...

最新文章

  1. Extjs 基础篇—— Function基础
  2. 扒出了3867篇论文中的3万个基准测试结果,他们发现追求SOTA其实没什么意义
  3. python 中shape 1,n 与1的区别
  4. python bar
  5. C# 调用Windows API实现两个进程间的通信
  6. AndroidO Treble架构下HIDL服务Java框架实现
  7. python画猴子_Python学习笔记(1)
  8. python中for循环怎么打开_详解Python中for循环的使用
  9. 线程池(领导者-追随者,生产者-消费者等)小结
  10. ViT (Vision Transformer) ---- RNN
  11. Node.js:Node模块简介
  12. cookie被淘汰_可爱可恨的 Cookie
  13. android studio : Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.31
  14. 8cm等于多少像素_像素和厘米如何换算
  15. linux如何卸载谷歌输入法,Linux上使用谷歌输入法
  16. 运动会加油稿计算机学院150字,学校运动会加油稿150字
  17. Could not establish connection to...
  18. 函数的基本概念以及函数封装
  19. Java课程project(SMAC计算器)----基于JavaSE
  20. 1.亿级流量电商详情页系统实战--主节点部署redis

热门文章

  1. smipleChart 简单图表类 javascript
  2. linux进程管理(一)
  3. 从内容打到社交,头腾大战矛头又指向了游戏
  4. 获取当前时间精确到毫秒
  5. 增量式PID是什么?不知道你就落伍了
  6. 什么是devicenet跟以太网啥区别
  7. 如何将mp4视频格式转换成flv视频
  8. 2017年腾讯笔试题目
  9. 2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】
  10. 定位篇align_measurements