利用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 相关文章推荐
17个Python小技巧分享
Jan 23 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
如何用Python合并lmdb文件
Jul 02 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
Python 依赖库太多了该如何管理
Nov 08 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 Python
python进度条显示之tqmd模块
Aug 22 Python
Pygame Event事件模块的详细示例
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
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP数组函数知识汇总
2016/05/12 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
script标签的 charset 属性使用说明
2010/12/04 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
vue源码nextTick使用及原理解析
2019/08/13 Javascript
python微信公众号开发简单流程
2018/03/23 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
Python实现不规则图形填充的思路
2020/02/02 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
巴西网上药房:onofre
2016/11/21 全球购物
大学生求职推荐信
2013/11/27 职场文书
初一家长会邀请函
2014/01/31 职场文书
保护环境倡议书
2014/04/14 职场文书
英语系毕业生求职信
2014/07/13 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
bat批处理之字符串操作的实现
2022/03/16 Python