利用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 相关文章推荐
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
Python 高级专用类方法的实例详解
Sep 11 Python
Python中property属性实例解析
Feb 10 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
Python可变和不可变、类的私有属性实例分析
May 31 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
pycharm的python_stubs问题
Apr 08 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用正则表达式匹配URL的简单方法
2013/11/12 PHP
深入php内核之php in array
2015/11/10 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
Python 字典与字符串的互转实例
2017/01/13 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python hashlib加密实现代码
2019/10/17 Python
Python中and和or如何使用
2020/05/28 Python
了解一下python内建模块collections
2020/09/07 Python
python批量修改文件名的示例
2020/09/27 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
仓库管理专业个人自我评价范文
2013/11/11 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技