利用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中字符编码简介、方法及使用建议
Jan 08 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
python实现list由于numpy array的转换
Apr 04 Python
解决python报错MemoryError的问题
Jun 26 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
深入浅析Python中的迭代器
Jun 04 Python
如何基于Python创建目录文件夹
Dec 31 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
使用Pytorch搭建模型的步骤
Nov 16 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 函数中使用static的说明
2012/06/01 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
js单例模式详解实例
2013/11/21 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
python中的闭包函数
2018/02/09 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
肯尼迪就职演说稿
2013/12/31 职场文书
任命书怎么写
2014/06/04 职场文书
升学宴学生答谢词
2015/01/05 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
Java spring单点登录系统
2021/09/04 Java/Android
使用javascript解析二维码的三种方式
2021/11/11 Javascript
Android Studio 计算器开发
2022/05/20 Java/Android