利用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验证码识别
Jan 25 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
浅谈Python NLP入门教程
Dec 25 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
python生成器用法实例详解
Nov 22 Python
python将数组n等分的实例
Dec 02 Python
python3将变量写入SQL语句的实现方式
Mar 02 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
python实战之用emoji表情生成文字
May 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读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php 获取本地IP代码
2013/06/23 PHP
隐性调用php程序的方法
2015/06/13 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
用JS实现的一个include函数
2007/07/21 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Python进程间通信之共享内存详解
2017/10/30 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python的继承知识点总结
2018/12/10 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python reduce函数作用及实例解析
2020/05/08 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
公立医院改革实施方案
2014/03/14 职场文书
中药学专业求职信
2014/05/31 职场文书
客户答谢会致辞
2015/07/30 职场文书
MySQL 数据库范式化设计理论
2022/04/22 MySQL