学习OpenCV中,教程提到的这几个文件和文件夹在哪里呀?

BigSix BigSix 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

正在学习OpenCV,看http://www.opencv.org.cn/这个网页教程(OpenCV没什么教程,就这个了,大家都是看它的吧?不过这几天这个站居然访问不了,幸好我本机有下载备份),教程中有一节《OpenCV 与 VC 及 DirectShow 的编程》,提到要在“工程--设置”中加入这些文件夹:

C:\Program Files\Intel\plsuite\include

C:\Program Files\Intel\plsuite\lib\msvc

还有这个lib文件:ipl.lib

这些文件和文件夹在哪呀?我看不是OpenCV安装上去的文件呀。事实上我搜了整个硬盘都没找到这个ipl.lib。
搞的现在编译不过,后面没法看了。哪位大侠告诉我一下是怎么回事?
谢谢。

。
。


。




。



。



。



。



.



.


.


顺便贴上原文,大家参考一下:
---------------------------------------------------

OpenCV 与 VC 及 DirectShow 的编程

本文档翻译自:http://www.site.uottawa.ca/~laganier/tutorial/opencv+directshow/

目录 [隐藏]
1 一步一步教你用OpenCV和DirectShow技术
1.1 创建基于对话框的应用程序
1.2 装载并显示一幅图像
1.3 处理一幅图像
1.4 创建图像并访问象素
1.5 显示一个图像序列
1.6 创建一个滤波器的图
1.7 处理一个图像序列



一步一步教你用OpenCV和DirectShow技术
Robert Laganière, VIVA lab, University of Ottawa.(Qihe Li 译)

本页的目的是教你使用OpenCV库进行图像或图像序列处理。此外还介绍了DirectShow技术,该技术对处理图像序列或用摄像机捕获的序列尤其有用。

由于这是一份初学指南,我们尽力提供为达成目的的每一步的细节。此外,源代码也是可以获得的。注意,为了使程序尽可能简单短小,并没有总是采用一个好的编程风格。

本教程例子均采用OpenCV beta 3.1 + DirectX 8.1 + Visual C++ 6.0 service pack 5 在win2000下完成。

创建基于对话框的应用程序
这里所有的程序都将为简单的基于对话框的程序。这类应用程序可以用MFC的向导非常容易的创建。在你的VC菜单栏上选择File|New,启动MFCAppWizard(exe)。选择dialog-based应用;选择一个名字(这里叫CVision)。VC将为你创建一个简单的有着OK/Cancel的对话框。名字以Dlg结尾的类将包含控制对话框的组件的成员函数。

第一个任务是打开并显示一幅图像。首先我们加入一个选择图像文件的按钮,将其Caption属性改为“Open Image”。双击该按钮,修改相应的成员函数名为:OnOpen。对话框看起来将如下:

图

CFileDialog这个类是用来创建一个打开文件对话框。在OnOpen里面加入如下代码:

void CCvisionDlg::OnOpen()
{
CFileDialog dlg(TRUE, _T("*.bmp"), "",

OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,

"image files (*.bmp; *.jpg) |*.bmp;*.jpg|

AVI files (*.avi) |*.avi|All Files (*.*)|*.*||",NULL);

char title[]= {"Open Image"};

dlg.m_ofn.lpstrTitle= title;

if (dlg.DoModal() == IDOK) {

CString path= dlg.GetPathName(); // contain the

// selected filename
}
}
注意1.CFileDialog的构造函数的第四个参数要打开的文件扩展名。注意2. "image files (*.bmp; *.jpg) |*.bmp;*.jpg| AVI files (*.avi) |*.avi|All Files (*.*)|*.*||",NULL);是在同一行,中間勿斷行。

单击Open Image按钮,显示如下对话框:

图

装载并显示一幅图像
现在我们学习如何装作并显示图像,Intel库将帮助我们完成这个任务,特别是OpenCV的Highgui组件。这个包括在Windows环境下打开、保存、显示图像的功能。

首先我们看如何进行完全的环境配置,选择Project|Settings,C/C++ tab ,Preprocessor。添加一下路径:

C:\Program Files\Intel\plsuite\include
C:\Program Files\Intel\opencv\cv\include
C:\Program Files\Intel\opencv\otherlibs\highgui
选择Link Tab, Input,添加:

C:\Program Files\Intel\plsuite\lib\msvc
C:\Program Files\Intel\opencv\lib
最后选择General,添加以下库模块:

ipl.lib cv.lib highgui.lib

最好把这个设置通过Tools|Options...菜单设为全局选项。


图


注意:我们在以后的例子里还会用到DirectX的路径信息。这个必须始终是列表的第一行,以免和其它库冲突。

图


下面为项目添加如下头文件,名字叫 cvapp.h

#if !defined IMAGEPROCESSOR
#define IMAGEPROCESSOR

#include <stdio.h>
#include <math.h>
#include <string.h>
#include "cv.h" // include core library interface
#include "highgui.h" // include GUI library interface

class ImageProcessor {
IplImage* img; // Declare IPL/OpenCV image pointer
public:
ImageProcessor(CString filename, bool display=true) {
img = cvvLoadImage( filename ); // load image
if (display) {
// create a window
cvvNamedWindow( "Original Image", 1 );
// display the image on window
cvvShowImage( "Original Image", img );
}
}
~ImageProcessor() {
cvReleaseImage( &img );
}
};
#endif
以cvv开头的是highgui的函数。为了用ImageProcessor,将此头文件包入对话框。一旦文件打开,一个ImageProcessor的实例即被创建,如下:

void CCvisionDlg::OnOpen()
{
CFileDialog dlg(TRUE, _T("*.bmp"), "",
OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
"BMP files (*.bmp) |*.bmp|AVI files (*.avi) |*.avi|
All Files (*.*)|*.*||",NULL);
char title[]= {"Open Image"};
dlg.m_ofn.lpstrTitle= title;
if (dlg.DoModal() == IDOK) {
CString path= dlg.GetPathName();
ImageProcessor ip(path); // load, create and display
}
}
如果选择image,看起来如下:

图

处理一幅图像
让我们试着调用一个OpenCV的函数,我们将头文件重写如下:

#if !defined IMAGEPROCESSOR
#define IMAGEPROCESSOR

#include <stdio.h>
#include <math.h>
#include <string.h>
#include "cv.h" // include core library interface
#include "highgui.h" // include GUI library interface

class ImageProcessor {
IplImage* img; // Declare IPL/OpenCV image pointer
public:

ImageProcessor(CString filename, bool display=true) {
img = cvvLoadImage( filename ); // load image
if (display) {
cvvNamedWindow( "Original Image", 1 );
cvvShowImage( "Original Image", img );
}
}

void display() {
cvvNamedWindow( "Resulting Image", 1 );
cvvShowImage( "Resulting Image", img );
}
void execute();
~ImageProcessor() {
cvReleaseImage( &img );
}
};

extern ImageProcessor *proc;

#endif
添加c++源文件,名字cvapp.cpp,包含着执行处理的函数体:

#include "stdafx.h"
#include "cvapp.h"

// A global variable
ImageProcessor *proc = 0;

// the function that processes the image
void process(void* img) {
IplImage* image = reinterpret_cast<IplImage*>(img);
cvErode( image, image, 0, 2 );
}

void ImageProcessor::execute() {
process(img);
}
函数process调用OpenCV的函数完成。本例中,处理仅包括简单的形态学腐蚀(cvErode)。显然所有的处理都直接在execute成员函数里完成。同时没有调整,这里使用void指针作为process的参数。这是为了保持随后的例子的一致性(作为一个回调函数处理一个序列),为了简单,我们添加了 一个只想ImageProcessor的实例的全局变量。让我们修改我们的对话框,增加另一个按钮:

《图》


成员函数变为:

void CCvisionDlg::OnOpen()
{
CFileDialog dlg(TRUE, _T("*.bmp"), "",
OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|
OFN_HIDEREADONLY,
"image files (*.bmp; *.jpg) |*.bmp;*.jpg|
AVI files (*.avi) |*.avi|All Files (*.*)|*.*||",NULL);

char title[]= {"Open Image"};
dlg.m_ofn.lpstrTitle= title;

if (dlg.DoModal() == IDOK) {
CString path= dlg.GetPathName();
if (proc != 0)
delete proc;

proc= new ImageProcessor(path);
}
}

void CCvisionDlg::OnProcess()
{
if (proc != 0) {
// process and display
proc->execute();
proc->display();
}
}
如果打开图像并单击process按钮,结果如下:

《图》

上述例子的源代码

创建图像并访问象素
前例中,图像由文件打开。但在很多情况下,需要直接创建图像。可以通过首先建立一个表明图像格式的header然后使用IPL函数完成。如下例,分别为创建灰度图和彩色图:

// Creating a gray level image
IplImage* gray=
iplCreateImageHeader(1,0,IPL_DEPTH_8U,
"GRAY","G",
IPL_DATA_ORDER_PIXEL,IPL_ORIGIN_TL,IPL_ALIGN_QWORD,
width,height,
NULL,NULL,NULL,NULL);

iplAllocateImage(gray, 1, 0);

// Creating a color image
IplImage* color =
iplCreateImageHeader(3,0, IPL_DEPTH_8U,
"RGB", "BGR",
IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_TL, IPL_ALIGN_QWORD,
width, height
NULL,NULL,NULL,NULL);

iplAllocateImage(color, 1, 0);
第一个参数表示通道个数;如果图像中没有a通道,则第二个参数为0(在机器视觉中大部分情况都是这样)。第三个参数定义了像素类型。通常选择一个无符号8位像素(IPL_DEPTH_8U ),但是2字节有符号整型 (IPL_DEPTH_16S)4字节浮点型(IPL_DEPTH_32F ) 也很有用。下一个参数指定颜色模式(主要是"GRAY" 或"RGB") 和信道序列(在彩色图象的情况下) 。数据序列参量指定不同的颜色信道如何排列。 ...


上述例子的源代码

显示一个图像序列
为了处理图像序列(来自文件或摄像机),需要使用DirectShow。

...

...

...

完整类如下:

class SequenceProcessor {
IplImage* img; // Declare IPL/OpenCV image pointer
IGraphBuilder *pGraph;
IMediaControl *pMediaControl;
IMediaEvent *pEvent;

public:

SequenceProcessor(CString filename, bool display=true) {

CoInitialize(NULL);

pGraph= 0;

// Create the filter graph
if (!FAILED(
CoCreateInstance(CLSID_FilterGraph,
NULL, CLSCTX_INPROC,
IID_IGraphBuilder,
(void **)&pGraph))) {

// The two control interfaces
pGraph->QueryInterface(IID_IMediaControl,
(void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEvent,
(void **)&pEvent);

// Convert Cstring into WCHAR*
WCHAR *MediaFile=
new WCHAR[filename.GetLength()+1];
MultiByteToWideChar(CP_ACP, 0,
filename, -1, MediaFile,
filename.GetLength()+1);

// Create the filters
pGraph->RenderFile(MediaFile, NULL);

if (display) {

// Execute the filter
pMediaControl->Run();

// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
}
}
}

~SequenceProcessor() {

// Do not forget to release after use
SAFE_RELEASE(pMediaControl);
SAFE_RELEASE(pEvent);
SAFE_RELEASE(pGraph);

CoUninitialize();
}
};
当选择了一个AVI文件,一个渲染滤波器被创建,序列被显示。为了知道什么滤波器被创建,我们增加如下成员函数,对他们进行例举:

std::vector<CString> enumFilters() {

IEnumFilters *pEnum = NULL;
IBaseFilter *pFilter;
ULONG cFetched;
std::vector<CString> names;
pGraph->EnumFilters(&pEnum);

while(pEnum->Next(1, &pFilter, &cFetched) == S_OK)
{
FILTER_INFO FilterInfo;
char szName[256];
CString fname;

pFilter->QueryFilterInfo(&FilterInfo);
WideCharToMultiByte(CP_ACP, 0, FilterInfo.achName,
-1, szName, 256, 0, 0);
fname= szName;
names.push_back(fname);

SAFE_RELEASE(FilterInfo.pGraph);
SAFE_RELEASE(pFilter);
}

SAFE_RELEASE(pEnum);

return names;
}
...

...

...

以上例子源码

创建一个滤波器的图
...

...

...

处理一个图像序列
现在是时间处理图像序列了,我们想要做得是按顺序处理avi序列的每一帧。OpenCV提供了一个特殊的滤波器名位:ProxyTrans。它应该位于\opencv\bin。首先要对它进行注册才能使用。在命令窗口下用:regsvr32 ProxyTrans.ax即可。也许你需要包含它的路径。
...全文

相关推荐

基于opencv读取一个文件夹下所有图像并显示

在计算机视觉领域,OpenCV(开源计算机视觉库)是一个强大的工具,它提供了丰富的函数和模块来处理图像和视频。本教程将深入讲解如何利用OpenCV读取一个文件夹中的所有图像,并将它们显示出来。

进步小二郎

使用Python和OpenCV批量处理文件夹内图片

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,广泛应用于图像处理、视频分析、人脸识别等领域。在本章节,我们将介绍如何在Python环境中安装OpenCV库,并进行简单的使用操作。安装OpenCV通常可以通过Python的包管理工具pip进行,简单命令如下:或者,如果您需要包含GUI功能的完整版OpenCV,可以使用:在文件处理中,os 模块提供了一系列便捷的函数。如用于连接文件路径,检查路径是否存在,

彭喵喵

几个基于openCV开发的手势识别代码

【标题】"几个基于OpenCV开发的手势识别代码"涵盖了两个主要的知识点:手势识别技术和OpenCV的应用。

_AIzero

opencv安装教程

OpenCV 安装教程OpenCV(开源计算机视觉库)是一个强大的计算机视觉和机器学习库,广泛应用于图像处理、图像分析、人脸识别等领域。

你喜欢梅西吗

opencv 读取文件夹中的多幅图片并保存

### OpenCV读取文件夹中的多幅图片并保存#### 知识点一:OpenCV简介OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,支持多种编程语言如

lexi_qi
评论 3
收藏 已收藏
分享
返回顶部
BigSix
图形处理/算法 19,463 成员 50,678 内容