当前位置: 首页 > news >正文

OpenCV实现BGR2BayerGB/BG格式的转换

1、说明

OpenCV没有提供从BGR生成Bayer格式的接口,需要自己写
OpenCV定义为4种格式,分别为:
BGGR排列 -> RG格式
RGGB排列 -> BG格式
GRBG排列 -> GB格式
GBRG排列 -> GR格式

2、转换

void CUtils::BGR2BayerGB(const cv::Mat &matSrc, cv::Mat &matDst) //BGR格式转换为BayerGB格式
{//GRBG排列 -> GB格式matDst = cv::Mat(matSrc.size(), CV_8UC1, cv::Scalar::all(0));for (int y = 0; y < matSrc.rows; ++y){for (int x = 0; x < matSrc.cols; ++x){cv::Vec3b colorSrc = matSrc.at<cv::Vec3b>(y, x);uchar colorDst = 0;if (y % 2 == 0){colorDst = (x % 2 == 0) ? colorSrc[1] : colorSrc[2]; //G:R}else{colorDst = (x % 2 == 0) ? colorSrc[0] : colorSrc[1]; //B:G}matDst.at<uchar>(y, x) = colorDst;}}
}void CUtils::BGR2BayerBG(const cv::Mat &matSrc, cv::Mat &matDst) //BGR格式转换为BayerBG格式
{//RGGB排列 -> BG格式matDst = cv::Mat(matSrc.size(), CV_8UC1, cv::Scalar::all(0));for (int y = 0; y < matSrc.rows; ++y){for (int x = 0; x < matSrc.cols; ++x){cv::Vec3b colorSrc = matSrc.at<cv::Vec3b>(y, x);uchar colorDst = 0;if (y % 2 == 0){colorDst = (x % 2 == 0) ? colorSrc[2] : colorSrc[1]; //R:G}else{colorDst = (x % 2 == 0) ? colorSrc[1] : colorSrc[0]; //G:B}matDst.at<uchar>(y, x) = colorDst;}}
}

3、测试

void Widget::on_pushButton_BGR2BayerBG_clicked()
{QFileDialog *fileDlg = new QFileDialog(this);fileDlg->setWindowTitle(tr("打开图片"));QStringList qstrFilters;qstrFilters << "picture(*.bmp;*.jpg;*.png)";fileDlg->setNameFilters(qstrFilters);            //设置文件过滤器fileDlg->setFileMode(QFileDialog::ExistingFile); //设置选择单文件,如果是多个文件就写成ExistingFilesfileDlg->setAcceptMode(QFileDialog::AcceptOpen);if (fileDlg->exec() == QDialog::Accepted){QStringList strPathList = fileDlg->selectedFiles();if (strPathList.count() > 0){//文件路径QString file_path = strPathList.at(0);//打开图片cv::Mat m1;m1 = UTILS->readMat(file_path, cv::IMREAD_COLOR);//转换cv::Mat m2;UTILS->BGR2BayerBG(m1, m2);UTILS->writeMat("d:\\test_BGR2BayerBG.bmp", m2);//验证cv::Mat m3;cv::cvtColor(m2, m3, cv::COLOR_BayerBG2BGR);UTILS->writeMat("d:\\test_BayerBG2BGR.bmp", m3);}}fileDlg->close();delete fileDlg;fileDlg = nullptr;
}

http://www.lryc.cn/news/130903.html

相关文章:

  • Gateway网关路由以及predicates用法(项目中使用场景)
  • 深入浅出Pytorch函数——torch.nn.init.constant_
  • centos mysql8解决Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  • Docker实战:Docker常用命令
  • 基于51单片机直流电机转速数码管显示控制系统
  • 小程序商品如何指定打印机
  • LLaMA-7B微调记录
  • 域名子目录发布问题(nginx、vue-element-admin、uni-app)
  • 【环境配置】Windows 10 安装 PyTorch 开发环境,以及验证 YOLOv8
  • 数学建模之“层次分析法”原理和代码详解
  • 使用IText导出复杂pdf
  • 多线程并发服务器(TCP)
  • uni-app的Vue.js实现微信小程序的紧急事件登记页面功能
  • 面试题 17.16.按摩师
  • vscode里配置C#环境并运行.cs文件
  • uniapp配置添加阿里巴巴图标icon流程步骤
  • 大模型基础02:GPT家族与提示学习
  • 算法基础课——基础算法(模板整理)
  • 如何解决使用npm出现Cannot find module ‘XXX\node_modules\npm\bin\npm-cli.js’错误
  • 【华为认证数通高级证书实验-分享篇2】
  • ui设计需要学编程吗难不难学习 优漫动游
  • 什么是线程优先级?Java中的线程优先级是如何定义和使用的?
  • 无涯教程-TensorFlow - XOR实现
  • 计算机组成与设计 Patterson Hennessy 笔记(二)MIPS 指令集
  • 【设计模式】模板方法模式(Template Method Pattern)
  • 【潮州饶平】联想 IBM x3850 x6 io主板故障 服务器维修
  • 【AIGC】 国内版聊天GPT
  • 如何在Vue中进行单元测试?什么是Vue的模块化开发?
  • Matlab编程示例3:Matlab求二次积分的编程示例
  • 【Linux】线程同步和死锁