opencv将RGB转成YIQ

opencv将RGB转成YIQ最近在做运动检测 需要将 RGB 通道转换成 YIQ 通道 在网上查了很多发现实现的都比较差 现给出 RGB 转 YIQ 以及 YIQ 转回 RGB 程序这是 RGB 转为 YIQ 的原理 Y 代表的是亮度 I Q 是色彩 由于 YIQ 颜色空间具有能将图像中的亮度分量分离提取出来的优点 所以比较容易在复杂背景下进行运动目标检测根据变换矩阵 可以比较容易的写出函数 就是一个简单的矩阵相乘 Matx33frgb2y mat

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

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

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

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

(0)
上一篇 2026年3月18日 下午3:03
下一篇 2026年3月18日 下午3:03


相关推荐

  • 微信公众号基础功能搭建怎么弄_怎么做一个订阅号

    微信公众号基础功能搭建怎么弄_怎么做一个订阅号自动回复在微信公众号后台首页左侧导航栏中找到功能。然后点击自动回复。自动回复包含被关注回复、收到消息回复和关键词回复三项内容自定义菜单

    2025年7月6日
    4
  • 按位取反~运算_按位与按位或按位异或运算符

    按位取反~运算_按位与按位或按位异或运算符按位取反~运算首先我们来看按位取反的概念按位取反运算符:对数据的每个二进制位取反,即把0变成1,把1变成0.即~x=-x-1这里按照定义9的二进制为00001001其按位取反为11110110结果为-10这个过程没有任何问题,但是如果忘记了负数的二进制表达方式,就会对这个结果产生疑问,为什么11110110表示-10而不是503?理解按位取反的关键是理解11110110为什么表示-10,也就是负数的二进制表达方式。现在计算机普遍使用补码表示负数。知道补码,求源码的方式是:值取反再加1。

    2022年8月14日
    10
  • 树与二叉树基本性质相关

    树与二叉树基本性质相关树的基本性质相关树的结点包含一个数据及指向子树的分支 结点拥有的子树数称为结点的度 度为 0 的结点称为叶结点 树的度是树的各节点度的最大值 结点的层次从根开始定义 根为第一层 根的孩子为第二层 树中结点的最大层次称为树的深度或者高度 二叉树的基本性质相关二叉树每个结点最多有两棵子树 不存在度大于 2 的结点 左右子树是有序的 二叉树的形态 空二叉树 只有根结点 根结点只有左子树 根结点只有右

    2026年3月19日
    1
  • 重新认识KCP_重新认识一个人的说说

    重新认识KCP_重新认识一个人的说说什么是KCP"KCP"是一种网络传输协议(AFastandReliableARQProtocol),可以视它为TCP的代替品,但是它运行于用户空间,它不管底层的发送与

    2022年8月2日
    6
  • 少儿编程的学习[通俗易懂]

    少儿编程第一课1.软件的认识2.顶部工具栏的认识3.认识背景,角色,舞台区,以及他们的分别上传4.代码库和代码编辑区第一课1.软件的认识Scratch是由MIT(美国麻省理工学院)针对5至16岁的儿童和青少年设计的可视化程序设计语言与开发环境,专注于用编程实现简单的动画效果。相比其他传统的编程语言,例如VB,Java,Pascal等相比,Scratch语言创建的目的不是为了培养少年程序员…

    2022年4月7日
    43
  • Redis 的 8 大数据类型,写得非常好!

    Redis 的 8 大数据类型,写得非常好!

    2022年2月17日
    36

发表回复

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

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