利用OpenCV中对图像数据进行64F和8U转换的方式


Posted in Python onJune 03, 2020

在OpenCV中很多对数据的运算都需要转换为64F类型,比如伽玛变换,这个很明显要求幂的底数是double类型~

而cvShowImage()又要求是U8才能显示,否则显示出来是一片空白!

所以经常要进行转换,怎么做呢?看了下面的几行代码你就知道了!

IplImage *pSrcImage = cvLoadImage("pout.jpg", CV_LOAD_IMAGE_UNCHANGED); 
IplImage *pGrayImage_8U = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); 
IplImage *pGrayImage_8U_2 = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); 

IplImage *pGrayImage_64F=cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_64F, 1);

cvCvtColor(pSrcImage, pGrayImage_8U, CV_BGR2GRAY); //RGB转灰度图像

cvConvertScale(pGrayImage_8U, pGrayImage_64F); //8U转64F
cvConvertScale(pGrayImage_64F, pGrayImage_8U_2) //64F转8U

补充知识:OpenCV中利用cvConvertScale()对图像数据作线性变换~

在OpenCV的IplImage结构体char * imageData成员的说明中,官方文档明确提示大家不能对这个指针所对应的数据直接操作,否则会带来意想不到的错误。

原话是这样的:

Do not assign imageData directly. Use SetData().

我曾经就犯傻直接进行操作,结果造成数据类型不匹配,最后还非得去修改头文件中的char * imageData为unsigned char * imageData才解决问题,然而这种操作是极其不妥的~正确的做法是用OpenCV提供的各种函数来对图像数据就行操作!比如cvConvertScale()、Use SetData()之类的!

这里我用cvConvertScale()来实现灰度图像的线性变换,程序非常简洁,而且没有任何问题!

源代码如下:

#include <opencv2/opencv.hpp> 
#include <opencv2/legacy/compat.hpp> 
using namespace std; 
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") 

int main()
{
int i=0;
unsigned char *imageData_1;
unsigned char *imageData_2;
const char *pstrWindowsATitle = "原图像(opencv66.net)"; 
const char *pstrWindowsBTitle = "线性变换后的图像(opencv66.net))"; 
//从文件中加载原图 
IplImage *pSrcImage = cvLoadImage("coins.png", CV_LOAD_IMAGE_UNCHANGED); 
//创建输出的图像
IplImage *pOutImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);
cvConvertScale(pSrcImage,pOutImage,2,-55); //利用cvConvertScale增加对比度的线性变换,线性变换中的比例因子k=2 偏移值b=-55
cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE); 
cvShowImage(pstrWindowsATitle,pSrcImage); 
cvNamedWindow(pstrWindowsBTitle, CV_WINDOW_AUTOSIZE); 
cvShowImage(pstrWindowsBTitle, pOutImage); 
cvWaitKey(0); 
cvDestroyWindow(pstrWindowsATitle); 
cvDestroyWindow(pstrWindowsBTitle); 
cvReleaseImage(&pSrcImage); 
cvReleaseImage(&pOutImage); 
return 0;
}

运行结果如下图所示(和我在MATLAB中的运行结果一致哦)

利用OpenCV中对图像数据进行64F和8U转换的方式

MATLAB运行后的结果

利用OpenCV中对图像数据进行64F和8U转换的方式

以上这篇利用OpenCV中对图像数据进行64F和8U转换的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 异常处理实例详解
Mar 12 Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
django框架自定义用户表操作示例
Aug 07 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
python实现实时视频流播放代码实例
Jan 11 Python
自学python用什么系统好
Jun 23 Python
为什么说python更适合树莓派编程
Jul 20 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 #Python
python golang中grpc 使用示例代码详解
Jun 03 #Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 #Python
QML用PathView实现轮播图
Jun 03 #Python
Python基于smtplib协议实现发送邮件
Jun 03 #Python
Pytorch环境搭建与基本语法
Jun 03 #Python
如何学习Python time模块
Jun 03 #Python
You might like
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP7常量数组用法分析
2016/09/26 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
es5 类与es6中class的区别小结
2020/11/09 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
python Django框架实现自定义表单提交
2016/03/25 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
主持词开场白
2014/03/17 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL