文档章节

Matlab与OpenCV混合编程(C++)

wangxuwei
 wangxuwei
发布于 2015/12/22 14:51
字数 240
阅读 84
收藏 0
#include "opencv2/opencv.hpp"
#include "mex.h"

using namespace cv;

/*******************************************************
Usage: [imageMatrix] = RGB2Gray('imageFile.jpeg');
Input: 
	a image file
OutPut: 
	a matrix of image which can be read by Matlab


**********************************************************/


void exit_with_help()
{
	mexPrintf(
	"Usage: [imageMatrix] = DenseTrack('imageFile.jpg');\n"
	);
}

static void fake_answer(mxArray *plhs[])
{
	plhs[0] = mxCreateDoubleMatrix(0, 0, mxREAL);
}

void RGB2Gray(char *filename, mxArray *plhs[])
{
	// read the image
	Mat image = imread(filename);
	if(image.empty()) {
		mexPrintf("can't open input file %s\n", filename);
		fake_answer(plhs);
		return;
	}
	
	// convert it to gray format
	Mat gray;
	if (image.channels() == 3)
		cvtColor(image, gray, CV_RGB2GRAY);
	else
		image.copyTo(gray);
	
	// convert the result to Matlab-supported format for returning
	int rows = gray.rows;
	int cols = gray.cols;
	plhs[0] = mxCreateDoubleMatrix(rows, cols, mxREAL);
	double *imgMat;
    imgMat = mxGetPr(plhs[0]);
	for (int i = 0; i < rows; i++)
		for (int j = 0; j < cols; j++)
			*(imgMat + i + j * rows) = (double)gray.at<uchar>(i, j);
	
	return;
}

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
	if(nrhs == 1)
	{
		char filename[256];
		mxGetString(prhs[0], filename, mxGetN(prhs[0]) + 1);
		if(filename == NULL)
		{
			mexPrintf("Error: filename is NULL\n");
			exit_with_help();
			return;
		}

		RGB2Gray(filename, plhs);
	}
	else
	{
		exit_with_help();
		fake_answer(plhs);
		return;
	}
}

编译与测试

>> mex -I/opt/local/opencv2.4/include  -L/opt/local/opencv2.4/lib -lopencv_core  -lopencv_highgui -lopencv_imgproc -lopencv_video  RGB2Gray.cpp
>> img = RGB2Gray('test.jpg');
>> imshow(uint8(img));
Warning: Image is too big to fit on screen; displaying at 50% 
> In imuitools/private/initSize at 72
  In imshow at 259 
>>


© 著作权归作者所有

wangxuwei
粉丝 25
博文 335
码字总数 117394
作品 0
杭州
其他
私信 提问
OpenCV各版本差异与演化,从1.x到4.0

博客:blog.shinelee.me | 博客园 | CSDN 写在前面 最近因项目需要,得把OpenCV捡起来,登录OpenCV官网,竟然发现release了4.0.0-beata版本,所以借此机会,查阅资料,了解下OpenCV各版本的差...

Mr-Lee
2018/10/31
0
0
OpenCV轻松进阶初级篇(一)安装OpenCV

OpenCV是什么? OpenCV是Open Source Computer Vision Library的缩写。Intel于1999年建立OpenCV项目,现在由Willow Garage提供支持。它是一个基于BSD许可证授权发行的跨平台计算机视觉库,可...

鉴客
2011/11/30
939
0
OpenCV 4.0.0-alpha 发布,Intel 开源的计算机视觉库

OpenCV 4.0.0-alpha 发布了,这是 4.0 final 版本发布前的首个过渡版本。OpenCV 是 Intel 开源的计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通...

局长
2018/09/24
2.2K
4
opencv3.x + MFC显示图片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/byxdaz/article/details/88091164 opencv3.X + MFC显示图片 使用opencv和MFC显示图片的方法大致分为以下几种:...

byxdaz
03/03
0
0
什么是OpenCV ?

什么是OpenCV ? OpenCV的全称是:Open Source Computer Vision Library OpenCV是Intel开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算...

heartfly
2010/04/09
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

默认指定logback日志位置

平常我们在使用logback作为日志框架的时候,如果我们不指定日志的绝对路径,就会在我们的当前目录(user.dir)下面生成日志文件,平常我们在开发阶段只要制定一个log目录就好了,但是如果在生...

seno
27分钟前
0
0
浅谈 Spark 的多语言支持

作者:郑锴,花名铁杰,阿里巴巴高级技术专家,Apache Hadoop PMC,Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年,先后专注在安全,存储和计算领域。之前在 Intel,目前转战阿里...

阿里云官方博客
33分钟前
0
0
Windows 10 文件覆盖的坑

Windows 10 下,文件覆盖的时候,如果文件名大小写不同,但字母相同时,会有问题。 如下图,新文件是大写 S 开头,旧文件是小写开头,覆盖后,仍然是小写开头。 不过文件内容是覆盖过来了的,...

yeyi771
34分钟前
2
0
浅谈 Spark 的多语言支持

作者:郑锴,花名铁杰,阿里巴巴高级技术专家,Apache Hadoop PMC,Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年,先后专注在安全,存储和计算领域。之前在 Intel,目前转战阿里...

阿里云云栖社区
39分钟前
4
0
Linux运维常见的硬件及系统问题

一、服务器常见故障和现象 1、有关服务器无法启动的主要原因 : ①市电或电源线故障(断电或接触不良) ②电源或电源模组故障 ③内存故障(一般伴有报警声) ④CPU故障(一般也会有报警声) ⑤主板故...

寰宇01
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部