利用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使用htpasswd实现基本认证授权的例子
Jun 10 Python
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
Nov 18 Python
Python中for循环控制语句用法实例
Jun 02 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
详解python常用命令行选项与环境变量
Feb 20 Python
python使用PIL剪切和拼接图片
Mar 23 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 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 和 MySQL 基础教程(一)
2006/10/09 PHP
golang与PHP输出excel示例
2016/07/22 PHP
PHP中串行化用法示例
2016/11/16 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
js删除所有的cookie的代码
2010/11/25 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
实时获取Python的print输出流方法
2019/01/07 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
浅析NumPy 切片和索引
2020/09/02 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
悦木之源美国官网:Origins美国
2016/08/01 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
公司业务主管岗位职责
2013/12/07 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL