利用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的Bottle框架的一些使用技巧介绍
Apr 08 Python
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
最大K个数问题的Python版解法总结
Jun 16 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
在python中画正态分布图像的实例
Jul 08 Python
python中自带的三个装饰器的实现
Nov 08 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
Feb 20 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 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php 随机生成10位字符代码
2009/03/26 PHP
PHP 图片上传代码
2011/09/13 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
超简单使用Python换脸实例
2019/03/27 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
法学专业应届生求职信
2013/10/16 职场文书
秘书岗位职责
2013/11/18 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
租赁意向书范本
2014/04/01 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
学历证明范文
2015/06/16 职场文书
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技