ubuntu 12 下安装配置编译使用opencv 2.3.0 全过程

本文详细介绍了如何在Ubuntu环境下安装和配置OpenCV 2.3.0,并提供了从下载、编译到最终使用的完整流程。此外还分享了通过脚本自动化安装过程的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     经过几天的努力,初步完成了对opencv2.3.0的安装和使用。记录下过程希望对他人有帮助。

     首先,的步骤当然是下载和编译opencv,根据这位大神提供的思路http://www.samontab.com/web/2010/04/installing-opencv-2-1-in-ubuntu/,安装和编译还是比较轻松。主要有以下几步:

     1、下载opencv解压opencv

     2、进入解压后的目录,建立一个目录用来安放编译后的文件,目录的名字自己取,我去的名字是release

     3、不记得哪个版本的opencv之后,编译前的配置不再用configure文件了。而改用cmake ,所有赶紧看看自己的系统中是否安装了cmake 没有的话,赶紧安装吧。

     4、进去我们刚才创建的目录中,运行cmake

     5、之后就是make && make install 了。

     这里特别提示你需要安装一个库,不然在运行的时候你就会发现一个问题

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /home/bush/OpencvSrc/OpenCV-2.3.0/modules/highgui/src/window.cpp, line 275
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/bush/OpencvSrc/OpenCV-2.3.0/modules/highgui/src/window.cpp:275: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvNamedWindow

      问题的原因信息已经提示了要安装libgtk2.0-dev and pkg-config,这个不难,键入以下的命令就可以了。pkg-config已经在系统中安装了。

     以上几个步骤对应的命令是

     1、

wget http://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.3/OpenCV-2.3.0.tar.bz2;
tar -xvf OpenCV-2.3.0.tar.bz2

    2、

cd OpenCV-2.3.0
sudo mkdir relese
cd relese
sudo apt-get install libgtk2.0-dev

     3、这里就需要看看你的系统中是否安装了cmake了,如果没有安装,就请自行安装吧命令也很简单

sudo apt-get install cmake
     我一般将安装和编译的过程写在脚本当中,
#########################################################################
# File Name: Install_cmake.sh
# Author: ma6174
# mail: ma6174@163.com
# Created Time: 2014年02月28日 星期五 13时32分53秒
#########################################################################
#!/bin/bash


##############################################
# FunctionName:echocolor
# Author: bush2582
# Role:the output will have color
# Created Time: 
##############################################
echocolor(  )
{
	  echo -e "\e[0;33m${@}\e[0m";
}



##############################################
# FunctionName:InstallGCC
# Author: bush2582
# Role:check g++ is already in system
# Created Time: 
##############################################
function InstallGCC (  )
{
	
	which g++;
	if [ $? -eq 1 ];
	then
		read -p " g++ is not installed in this system do you want to install? (Y/y/n/N) " ynInstall_GCC;
		
		if [ $ynInstall_GCC = "Y" ] || [ $ynInstall_GCC = "y" ] ;
		then
			#echo " now we will install g++ ";
			echocolor "now we will install g++"
			sudo apt-get install g++;
		fi
	else
		echocolor "g++ already install in this system ";
	fi
}
##############################################
# FunctionName:InstallCmake
# Author: bush2582
# Role:install Cmake
# Created Time: 
##############################################

function InstallCmake(  )
{
	  InstallGCC;
	  echocolor " now we will star the program that CMake is installed in this system ";
	  cd cmake-2.8.0;
	  ./configure;
	  sudo make;
	  sudo make install;
	  exit 0;
}




#########################################################################
read -p "Do you want to download Cmake? (Y/y/n/N)?" downyn
if [ $downyn = "Y" ] || [ $downyn = "y" ];
then 
	wget http://down1.chinaunix.net/distfiles/cmake-2.8.0.tar.gz;
	echocolor "now Staring Tar cmake";
	tar -xvf cmake-2.8.0.tar.gz;
else
	echocolor "now Staring Tar cmake";
	tar -xvf cmake-2.8.0.tar.gz;
fi

read -p " Do you want to install camke now (Y/y/n/N)? " yn
if [ $yn = "y"  ] || [ $yn = "Y"  ] ;
then	
	InstallCmake;
else
	exit 0;
fi
      3、这里的/usr/local/opencv是我自定义在系统中安装的路径
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv -D BUILD_PYTHON_SUPPORT=ON ..
 
      4、配置后自然就是make 和make install 了
sudo make 
sudo make install

      当然你可以选择脚本的方法来安装,

#######################################################################
# File Name: LoadOpencv.sh
# Author: ma6174
# mail: ma6174@163.com
# Created Time: 2014年02月28日 星期五 10时46分11秒
#########################################################################
#!/bin/bash

#--------------------------------------------#
# FunctionName:echocolor
# Author: bush2582
# Role:the output will have color
# Created Time: 
#--------------------------------------------#
echocolor(  )
{
	  echo -e "\e[0;33m${@}\e[0m";
	  
}


read -p "Do you want to download Opencv-2.3.0? (Y/N)" DownLoadOpencv
if [ $DownLoadOpencv = "Y" ];
then
	echocolor "now Staring downLoad Opencv2.3.0 ";
	wget http://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.3/OpenCV-2.3.0.tar.bz2;
	echocolor "Staring tar OpenCV-2.3.0.tar.bz2 "
	tar -xvf OpenCV-2.3.0.tar.bz2
else
	tar -xvf OpenCV-2.3.0.tar.bz2
	echocolor "Staring tar OpenCV-2.3.0.tar.bz2 "
fi

cd OpenCV-2.3.0
sudo mkdir relese
cd relese
sudo apt-get install libgtk2.0-dev
read -p "Please input Dir which you want to install " Dir
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$Dir -D BUILD_PYTHON_SUPPORT=ON ..
read -p  "now we will star opencv make&&install  in $Dir .Do you want to continue?( Y/N )  " GoOn
if [ $GoOn = "Y"  ] ;
then
	sudo make 
	sudo make install
else
	exit 0;
fi   

     这里,opencv的安装算是完成了,不过要怎么用它编译我自己的源代码呢?

     需要做一些配置工作了。需要做如下的几步工作

     1.添加库路径

sudo vim /etc/ld.so.conf.d/opencv.conf
/usr/local//opencv/lib(添加内容)

    2.更新系统库

$sudo ldconfig

    3.设置环境变量

export PKG_CONFIG_PATH=/usr/local/opencv/lib/pkgconfig:$PKG_CONFIG_PATH
    你也可以选择脚本,

#########################################################################
# File Name: ConfigureOpencv.sh
# Author: bush2582
# mail: bush2582@163.com
# Created Time: 2014年03月02日 星期日 15时45分54秒
#########################################################################
#!/bin/bash
ConfFileDir="/etc/ld.so.conf.d/opencv.conf"
OpencvLibDir="/usr/local/opencv/lib"
BashDir="/etc/bash.bashrc"
PKG="PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv/lib/pkgconfig"
PKGExport="export PKG_CONFIG_PATH"
sudo file $ConfFileDir;
if [ $? -eq 1 ] ;
then
	sudo touch $ConfFileDir;
fi

sudo grep -x $OpencvLibDir $ConfFileDir
if [ $? -eq 1  ] ;
then
	sudo echo $OpencvLibDir >> $ConfFileDir;
fi

sudo ldconfig

sudo grep -x $PKG $BashDir

if [ $? -eq 1  ] ;
then
	sudo echo $PKG >> $BashDir;
	sudo echo $PKGExport >> $BashDir;
fi


sudo grep -x $PKG $BashDir
source $BashDir

这里说明几点:1、使用>> 可以在文件的最后累加文字。2、touch可以用来创建一个0字节的文件。3、grep -x 可以用来严格匹配文件中的数据。4、file 命令用来查看文件是否存在。(这里需要做完系统环境的配置后,重新打开一个命令行。关闭原来的命令行)

     好了现在opencv的系统环境配置好了,那么我们怎么编译呢?当然用g++ ,不过我觉得输入一大堆命令太麻烦,索性写了个makefile 文件,

OBJS=  test.o
CC=g++
INCLUDE=  -I/usr/local/opencv/include -I/usr/local/opencv/include/opencv -I/home/bush/prj/linuxchuankou/include
LIB= -L /usr/local/opencv/lib `pkg-config --libs opencv`
Test:$(OBJS)
	$(CC) -o   Test     $(OBJS)   $(LIB)
test.o:test.cpp 
	$(CC) -c -g  test.cpp       $(INCLUDE)
clean:
	-rm Test $(OBJS)
#`pkg-config --libs opencv` -I/usr/local/OpenCV-2.4.2/build/include/opencv2-lopencv_highgui -lopencv_core

     这是我的测试源码

/*************************************************************************
    > File Name: test.cpp
    > Author: bush2582
    > Mail: bush2582@163.com 
    > Created Time: 2014年03月02日 星期日 15时23分01秒
 ************************************************************************/

#include<iostream>
#include "cv.h"
#include "highgui.h"
using namespace std;
int main (  )  
{
	  IplImage * img=cvLoadImage("1.png",0);
	  cvNamedWindow("img",1  );
	  cvShowImage("img",img  );
	  cvWaitKey(0);
	  cvDestroyWindow("img");
	  cvReleaseImage(&img);
	  return 0;
}

      在命令行中键入make 就可以编译完成了哈。

      以上就是opencv2.3.0的编译安装和使用过程,希望对你有帮助哦。

转载请著名地址哦

http://blog.youkuaiyun.com/bush2582/article/details/20299615
<think>好的,用户现在问的是如何在C++中获取自己编译OpenCV库支持的图片格式。我需要先理解用户的需求,他们可能是在开发一个图像处理的应用,需要知道当前编译OpenCV支持哪些图像格式,以便处理不同的文件类型。用户可能自己编译OpenCV,可能启用了某些选项或者第三方库,比如libjpeg、libpng等,这些会影响支持的格式。 首先,我需要回忆OpenCV中相关的方法。我记得OpenCV有一个函数叫做cv::getBuildInformation(),可以返回构建时的配置信息,里面会列出支持的图像格式。所以用户可以通过调用这个函数来查看所有支持的编解码器。 另外,用户可能需要知道如何在代码中动态检查某种格式是否被支持。比如,使用cv::imread函数读取图片时,如果格式不支持,可能会失败。或者使用cv::haveImageReader和cv::haveImageWriter函数来检查读写支持。这两个函数是在较新的OpenCV版本中添加的,可能用户需要确认他们的版本是否支持。 接下来,用户可能需要具体的代码示例。我应该给出如何输出构建信息,以及如何遍历检查所有可能的格式是否被支持。比如,创建一个格式列表,然后逐个检查是否可用。 需要注意的是,用户自己编译OpenCV可能因为依赖库的缺失导致某些格式不支持。例如,如果没有安装libjpeg-turbo,那么JPEG格式可能无法使用。因此,在获取支持格式时,构建信息中的编解码器部分会显示哪些是被启用的。 用户可能的深层需求是确保他们的应用能够处理特定的图像格式,或者调试为什么某些图像无法读取/保存。因此,除了列出支持的格式,还需要指导他们如何根据构建信息确认依赖库是否正确安装,以及如何重新编译OpenCV以包含所需的格式支持。 另外,可能有些用户不知道如何查看构建信息,或者在代码中如何集成这些检查步骤。需要给出详细的步骤和示例代码,确保他们能够实际操作。 总结下来,回答应该包括以下几个部分: 1. 使用cv::getBuildInformation()获取构建信息,并从中提取支持的图像格式。 2. 使用cv::haveImageReader和cv::haveImageWriter动态检查特定格式的支持。 3. 提供代码示例,展示如何输出这些信息。 4. 解释如何根据构建信息确认第三方库的启用情况。 5. 提示用户如果缺少某些格式,可能需要重新编译OpenCV安装相应的依赖库。 需要确保回答结构清晰,逐步引导用户解决问题,并提供实际的代码示例,方便用户直接应用。同时,注意提醒用户不同OpenCV版本之间的差异,特别是函数可用性,比如haveImageReader和haveImageWriter在旧版本中可能不存在。</think>--- ### 方法 1:通过 OpenCV 构建信息查看支持的图片格式 OpenCV编译时会根据依赖库(如 libjpeg、libpng 等)的安装情况自动启用对应的图片格式支持。可以通过以下代码直接输出支持的格式列表: ```cpp #include <opencv2/core/utils/logger.hpp> // OpenCV 4.5+ 需要 #include <opencv2/core/utils/filesystem.hpp> #include <iostream> int main() { // 输出 OpenCV 构建信息 std::cout << cv::getBuildInformation() << std::endl; return 0; } ``` #### 关键输出示例: 在输出信息中搜索 `Image I/O` 或 `Video I/O` 部分,例如: ``` Image I/O: ZLIB: ../../3rdparty/lib/libzlib.a (ver 1.2.13) JPEG: build-libjpeg-turbo (ver 2.1.4-62) WEBP: build (ver encoder: 0x020f) PNG: build (ver 1.6.40) TIFF: build (ver 42 - 4.2.0) JPEG 2000: build (ver 2.5.0) OpenEXR: build (ver 2.3.0) HDR: YES SUNRASTER: YES PXM: YES PFM: YES ``` - **YES** 表示支持该格式。 - **NO** 或未提及的格式表示未启用支持。 --- ### 方法 2:通过代码动态检测支持的格式 OpenCV 提供 `cv::haveImageReader` 和 `cv::haveImageWriter` 函数,可直接检测当前编译版本是否支持特定格式的读写: ```cpp #include <opencv2/imgcodecs.hpp> #include <iostream> int main() { // 支持的格式列表(常见扩展名) const std::string formats[] = { "jpg", "jpeg", "png", "bmp", "webp", "tiff", "tif", "ppm", "sr", "ras", "hdr", "exr" }; std::cout << "支持的图片格式:" << std::endl; for (const auto& format : formats) { bool canRead = cv::haveImageReader("test." + format); bool canWrite = cv::haveImageWriter("test." + format); if (canRead || canWrite) { std::cout << "- " << format << " [读: " << (canRead ? "是" : "否") << ", 写: " << (canWrite ? "是" : "否") << "]" << std::endl; } } return 0; } ``` #### 输出示例: ``` 支持的图片格式: - jpg [读: 是, 写: 是] - jpeg [读: 是, 写: 是] - png [读: 是, 写: 是] - bmp [读: 是, 写: 是] - webp [读: 是, 写: 是] - tiff [读: 是, 写: 是] - tif [读: 是, 写: 是] ``` --- ### 方法 3:查看官方文档与编译选项 #### 编译 OpenCV 时支持的图片格式依赖库: | 图片格式 | 依赖库 | 编译选项 (CMake) | |------------|---------------------------------|--------------------------------| | JPEG | libjpeg-turbo | `-DWITH_JPEG=ON` | | PNG | libpng | `-DWITH_PNG=ON` | | WebP | libwebp | `-DWITH_WEBP=ON` | | TIFF | libtiff | `-DWITH_TIFF=ON` | | OpenEXR | OpenEXR | `-DWITH_OPENEXR=ON` | | JPEG 2000 | Jasper (或 OpenJPEG) | `-DWITH_JASPER=ON` | - 如果编译时未安装对应库,相关格式支持会被自动禁用。 - 通过 `cmake-gui` 检查编译配置,确认依赖库是否启用。 --- ### 常见问题解决 #### 如果缺少某些格式支持: 1. **安装依赖库**:例如在 Ubuntu安装 libjpeg-dev: ```bash sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libwebp-dev ``` 2. **重新编译 OpenCV**: ```bash cd opencv/build cmake -DWITH_JPEG=ON -DWITH_PNG=ON .. # 启用需要的选项 make -j4 sudo make install ``` --- ### 总结 1. **查看构建信息**:使用 `cv::getBuildInformation()` 直接获取编译时启用的格式。 2. **动态检测支持**:通过 `cv::haveImageReader` 和 `cv::haveImageWriter` 验证具体格式。 3. **检查编译选项**:确保依赖库已安装CMake 选项正确启用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值