利用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 base64 decode incorrect padding错误解决方法
Jan 08 Python
Python实现的计数排序算法示例
Nov 29 Python
Django 根据数据模型models创建数据表的实例
May 27 Python
python之文件读取一行一行的方法
Jul 12 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
python 实现绘制整齐的表格
Nov 18 Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
Python深度学习之Pytorch初步使用
May 20 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
php中this关键字用法分析
2016/12/07 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
js操作table示例(个人心得)
2013/11/29 Javascript
javascript控制台详解
2015/06/25 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
Python安装Bs4的多种方法
2020/11/28 Python
linux面试题参考答案(1)
2016/01/22 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
2014年团支书工作总结
2014/11/14 职场文书
2014年村官工作总结
2014/11/24 职场文书