利用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处理字符串之isspace()方法的使用
May 19 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
Python设计模式之命令模式简单示例
Jan 10 Python
Python 查看文件的读写权限方法
Jan 23 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
Python如何存储数据到json文件
Mar 09 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
Python logging模块handlers用法详解
Aug 14 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 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从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
Javascript - HTML的request类
2007/01/09 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
webpack之devtool详解
2018/02/10 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
JQuery获得内容和属性方法解析
2020/05/30 jQuery
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
大四学生毕业自荐信
2013/11/07 职场文书
土建资料员岗位职责
2014/01/04 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
成绩单家长评语大全
2014/04/16 职场文书
2014年售票员工作总结
2014/11/19 职场文书
统计工作个人总结
2015/03/03 职场文书
培训通知
2015/04/17 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
利用python做数据拟合详情
2021/11/17 Python
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS
win10搭建配置ftp服务器的方法
2022/08/05 Servers