利用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判断、获取一张图片主色调的2个实例
Apr 10 Python
python中常用的九种预处理方法分享
Sep 11 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
新手学python应该下哪个版本
Jun 11 Python
python如何调用java类
Jul 05 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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出错界面
2006/10/09 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
php自动获取关键字的方法
2015/01/06 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
python pandas模块基础学习详解
2019/07/03 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
浙大毕业生自荐信
2014/01/26 职场文书
运动会开幕式主持词
2014/03/28 职场文书
世博会口号
2014/06/20 职场文书
效能风暴心得体会
2014/09/04 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
2015年团支部工作总结
2015/04/03 职场文书
公司管理制度范本
2015/08/03 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
PHP策略模式写法
2021/04/01 PHP
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis