利用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中getattr函数和hasattr函数作用详解
Jun 14 Python
深入浅出学习python装饰器
Sep 29 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
详解flask表单提交的两种方式
Jul 21 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
python3 pygame实现接小球游戏
May 14 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
TensorFlow打印输出tensor的值
Apr 19 Python
Python采集股票数据并制作可视化柱状图
Apr 04 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 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/12/05 PHP
php生成扇形比例图实例
2013/11/06 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
详解js类型判断
2018/05/22 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python获取本机外网ip的方法
2015/04/15 Python
简单讲解Python中的闭包
2015/08/11 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python实现的knn算法示例
2018/06/14 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
Python字符串三种格式化输出
2020/09/17 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
签约仪式策划方案
2014/06/02 职场文书
化学教育专业自荐信
2014/07/04 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
会计专业求职信范文
2015/03/19 职场文书
通知书大全
2015/04/27 职场文书