利用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实用技巧两则
Aug 29 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
python实现京东秒杀功能
Jul 30 Python
Django实现表单验证
Sep 08 Python
Python并行分布式框架Celery详解
Oct 15 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python使用列表的最佳方案
Aug 12 Python
Python字符串三种格式化输出
Sep 17 Python
Python模块常用四种安装方式
Oct 20 Python
Pygame Draw绘图函数的具体使用
Nov 17 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
什么是短波收听SWL
2021/03/01 无线电
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
Python可变参数函数用法实例
2015/07/07 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
详解Python self 参数
2019/08/30 Python
Django app配置多个数据库代码实例
2019/12/17 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
python集合能干吗
2020/07/19 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
大学毕业生自荐书怎么写?
2014/01/06 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技