利用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 BeautifulSoup使用方法详解
Nov 21 Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
Python实现求数列和的方法示例
Jan 12 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
python redis连接 有序集合去重的代码
Aug 04 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
python 如何快速复制序列
Sep 07 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
Python生成器定义与简单用法实例分析
2018/04/30 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Python之用户输入的实例
2018/06/22 Python
python生成n个元素的全组合方法
2018/11/13 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
广播体操比赛口号
2014/06/10 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
Nginx安装配置详解
2022/06/25 Servers