• Open Source Computer Vision Library

图像文件读入和显示

Wikipedia,自由的百科全书

(修订版本间差异)
10:14 2006年11月9日的修订版本
Shiqi Yu (Talk | 贡献)

← Previous diff
当前修订版本
Sn0371410 (Talk | 贡献)
论坛常见问题
第 1行: 第 1行:
来自于仕琪的讲稿[http://fsa.ia.ac.cn/?q=act17 《使用OpenCV进行图像处理》]中的例程 来自于仕琪的讲稿[http://fsa.ia.ac.cn/?q=act17 《使用OpenCV进行图像处理》]中的例程
-<pre>+=C语言版本=
-<pre>+<source lang="c">/***********************************************************************
-/***********************************************************************+
* OpenCV example * OpenCV example
- * Copyright (C) 2006 Shiqi Yu+ * By Shiqi Yu 2006
- *+
- * This program is free software; you can redistribute it and/or modify+
- * it under the terms of the GNU General Public License as published by+
- * the Free Software Foundation; either version 2 of the License, or+
- * (at your option) any later version.+
- *+
- * This program is distributed in the hope that it will be useful,+
- * but WITHOUT ANY WARRANTY; without even the implied warranty of+
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+
- * GNU General Public License for more details.+
- *+
- * You should have received a copy of the GNU General Public License+
- * along with this program; if not, write to the Free Software+
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA+
***********************************************************************/ ***********************************************************************/
第 30行: 第 15行:
//载入图像 //载入图像
if( argc == 2 && if( argc == 2 &&
- (pImg = cvLoadImage( argv[1], 1)) != 0 )+ (pImg = cvLoadImage( argv[1], 1)) != 0 )//[[此处的argc==2是否需要改成argc==1?我改了之后才能运行成功。求大牛解惑]] // wmzzzz : 在"属性"|"debug"|里的command arguments 里加入参数(一个路径:要打开的文件路径) 这时 argc==2 就合理了...可以试试多加几个
{ {
cvNamedWindow( "Image", 1 );//创建窗口 cvNamedWindow( "Image", 1 );//创建窗口
第 43行: 第 28行:
return -1; return -1;
 +}</source>
 +
 +=函数说明=
 +cvLoadImage( filename, -1 ); 默认读取图像的原通道数
 +
 +cvLoadImage( filename, 0 );强制转化读取图像为灰度图
 +
 +cvLoadImage( filename, 1 );读取彩色图
 +==论坛常见问题==
 +#opencv在VC6.0环境下加载一幅图片,为什么窗口显示总为整个屏幕显示,且是图像变形了?代码应该没有问题的,我是照着视频资料上写的,可就是运行后图像显示变形了。请哪位高手指点一下#include "stdafx.h"
 +#include "cv.h"
 +#include "highgui.h"
 +#include "cxcore.h"
 +
 +int main(int argc, char* argv[])
 +{
 + IplImage* src =cvLoadImage("E:\\1.JPG",,CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR);
 + cvNamedWindow("win");
 + cvShowImage("win",src);
 + cvWaitKey(0);
 +
 + cvReleaseImage(&src);
 + cvDestroyWindow("win");
 +
 + return 0;
} }
-</pre>+ 
 +如何显示图像的原始大小?
 + 
 += C++语言版本 based on OpenCV 2.1 =
 +<source lang="cpp">
 +/***********************************************************************
 + * OpenCV 2.1 example
 + * By Pebbler Chung 2010
 + ***********************************************************************/
 + 
 +#include "cv.h"
 +#include "highgui.h"
 + 
 +using namespace cv; //下面的所有cv相关类型不用加上前缀了
 + 
 +int main(int argc, char* argv[])
 +{
 + Mat img = imread("lena.jpg"); //声明Mat变量并调入lena的照片
 + 
 + if(!img.data) //判断图片调入是否成功
 + return -1; //调入图片失败则退出
 + //创建窗口,并确定其为大小不可变类型窗口
 + namedWindow("loveLena", CV_WINDOW_AUTOSIZE);
 + 
 + //显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow可以直接创建窗口
 + imshow("loveLena", img);
 + 
 + waitKey(); //等待按键
 + 
 + return 0;
 +}
 +</source>
 + 
 += C++语言版本 based on OpenCV 2.3.1 =
 +<source lang="cpp">
 +/***********************************************************************
 + * OpenCV 2.3.1 example
 + * By Quarryman 2012
 + ***********************************************************************/
 +#include "stdafx.h"
 +#include <string>
 +#include <opencv2\opencv.hpp>
 + 
 +using namespace cv;
 +using namespace std;
 + 
 +int main()
 +{
 + string imagename = "lena.jpg"; //此处需要填写绝对地址,我测试时使用相对地址出错。
 + 
 + //读入图像
 + Mat img = imread(imagename);
 + 
 + //如果读入图像失败
 + if(img.empty())
 + {
 + return -1;
 + }
 + 
 + //创建窗口
 + namedWindow("image",1);
 + 
 + //显示图像
 + imshow("image", img);
 + 
 + //等待按键,按键盘任意键返回
 + waitKey();
 + 
 + return 0;
 + 
 + //错误指出: feihongmeilian
 + //经本人验证,string imagename = "lena.jpg"; 处是可以使用相对地址,本人使用环境为OpenCV 2.4.3
 + //图片为meinv.jpg置于代码文件所在文件夹的上一级文件夹中,string imagename = "..\\meinv.jpg" 图片可正常显示。
 + //需提醒注意的是 双引号“” 中出现的第一个 斜杠 \ 被视作转义字符
 +}
 +</source>
 + 
 +==C++版本的好处==
 +#在于可以尽量避免使用指针这种危险的东西了。
 +#另一个好处便在于,不用费心去release资源了,因为在其destructor里面,系统会自动帮你搞定。
 + 
 + 
 +wmzzzz:
 +死PP了...运行这个程序, Mat img = imread(imagename); 这行报以下错
 +Unhandled exception at 0x7854fdf1 in WmTestOpencv.exe: 0xC0000005: Access violation reading location 0xcccccccc.
 +好像是环境问题..我用C版本的没有问题..文件路径也没有错
 +求解..这是怎么回事啊???
 + 
 += Python版本 =
 + 
 +<source lang="python">
 +# -*- coding:utf-8 -*-
 +###########################################################
 +# OpenCV example
 +# By ChaiShushan 2008
 +###########################################################
 + 
 +import sys
 + 
 +# 导入OpenCV模块
 + 
 +from opencv.cv import *
 +from opencv.highgui import *
 + 
 +if __name__ == '__main__':
 +
 + if len(sys.argv) > 1:
 +
 + # 打开图像
 + 
 + image = cvLoadImage(sys.argv[1])
 + if not image: sys.exit(-1)
 +
 + # 创建窗口
 +
 + cvNamedWindow ("mywin")
 +
 + # 显示图像
 + 
 + cvShowImage ("mywin", image)
 + cvWaitKey (0)
 +</source>
 + 
 +注: Python版本由[http://sites.google.com/site/chaishushan/ chai2010]改写.
 + 
 +=OpenCV 2.1 with Python 2.6 (use new interface)=
 +<source lang="python">
 +# -*- coding:utf-8 -*-
 +# mycv.py
 +
 +import sys
 +
 +# 导入OpenCV模块
 +
 +import cv
 +
 +if __name__ == '__main__':
 +
 + # 打开图像
 +
 + image = cv.LoadImage ("lena.jpg")
 +
 + # 创建窗口
 +
 + cv.NamedWindow ("mywin")
 +
 + # 显示图像
 +
 + cv.ShowImage ("mywin", image)
 + cv.WaitKey (0)
 +</source>

当前修订版本

来自于仕琪的讲稿《使用OpenCV进行图像处理》中的例程

目录

C语言版本

/***********************************************************************
 * OpenCV example
 * By Shiqi Yu 2006
 ***********************************************************************/
 
#include "cv.h"
#include "highgui.h"
 
int main( int argc, char** argv )
{
    IplImage* pImg; //声明IplImage指针
 
    //载入图像
    if( argc == 2 && 
        (pImg = cvLoadImage( argv[1], 1)) != 0 )//[[此处的argc==2是否需要改成argc==1?我改了之后才能运行成功。求大牛解惑]] //  wmzzzz : 在"属性"|"debug"|里的command arguments 里加入参数(一个路径:要打开的文件路径) 这时 argc==2 就合理了...可以试试多加几个
    {
        cvNamedWindow( "Image", 1 );//创建窗口
        cvShowImage( "Image", pImg );//显示图像
 
        cvWaitKey(0); //等待按键
 
        cvDestroyWindow( "Image" );//销毁窗口
        cvReleaseImage( &pImg ); //释放图像
        return 0;
    }
 
    return -1;
}

函数说明

cvLoadImage( filename, -1 ); 默认读取图像的原通道数

cvLoadImage( filename, 0 );强制转化读取图像为灰度图

cvLoadImage( filename, 1 );读取彩色图

论坛常见问题

  1. opencv在VC6.0环境下加载一幅图片,为什么窗口显示总为整个屏幕显示,且是图像变形了?代码应该没有问题的,我是照着视频资料上写的,可就是运行后图像显示变形了。请哪位高手指点一下#include "stdafx.h"
  2. include "cv.h"
  3. include "highgui.h"
  4. include "cxcore.h"

int main(int argc, char* argv[]) { IplImage* src =cvLoadImage("E:\\1.JPG",,CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR); cvNamedWindow("win"); cvShowImage("win",src); cvWaitKey(0);

cvReleaseImage(&src); cvDestroyWindow("win");

return 0; }

如何显示图像的原始大小?

C++语言版本 based on OpenCV 2.1

/***********************************************************************
 * OpenCV 2.1 example
 * By Pebbler Chung 2010
 ***********************************************************************/
 
#include "cv.h"
#include "highgui.h"
 
using namespace cv; //下面的所有cv相关类型不用加上前缀了
 
int main(int argc, char* argv[])
{
    Mat img = imread("lena.jpg"); //声明Mat变量并调入lena的照片
 
    if(!img.data) //判断图片调入是否成功
         return -1; //调入图片失败则退出
    //创建窗口,并确定其为大小不可变类型窗口
    namedWindow("loveLena", CV_WINDOW_AUTOSIZE); 
 
    //显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow可以直接创建窗口
    imshow("loveLena", img);
 
    waitKey(); //等待按键
 
    return 0;
}

C++语言版本 based on OpenCV 2.3.1

/***********************************************************************
 * OpenCV 2.3.1 example
 * By Quarryman 2012
 ***********************************************************************/
#include "stdafx.h"
#include <string>
#include <opencv2\opencv.hpp>
 
using namespace cv;
using namespace std;
 
int main()
{
	string imagename = "lena.jpg";   //此处需要填写绝对地址,我测试时使用相对地址出错。
 
	//读入图像
	Mat img = imread(imagename);
 
	//如果读入图像失败
	if(img.empty())
	{
		return -1;
	}
 
	//创建窗口
	namedWindow("image",1);
 
	//显示图像
	imshow("image", img);
 
	//等待按键,按键盘任意键返回
	waitKey();
 
	return 0;
 
       //错误指出: feihongmeilian
       //经本人验证,string imagename = "lena.jpg";  处是可以使用相对地址,本人使用环境为OpenCV 2.4.3
       //图片为meinv.jpg置于代码文件所在文件夹的上一级文件夹中,string imagename = "..\\meinv.jpg"  图片可正常显示。
      //需提醒注意的是 双引号“” 中出现的第一个 斜杠 \ 被视作转义字符
}

C++版本的好处

  1. 在于可以尽量避免使用指针这种危险的东西了。
  2. 另一个好处便在于,不用费心去release资源了,因为在其destructor里面,系统会自动帮你搞定。


wmzzzz: 死PP了...运行这个程序, Mat img = imread(imagename); 这行报以下错 Unhandled exception at 0x7854fdf1 in WmTestOpencv.exe: 0xC0000005: Access violation reading location 0xcccccccc. 好像是环境问题..我用C版本的没有问题..文件路径也没有错 求解..这是怎么回事啊???

Python版本

# -*- coding:utf-8 -*-
###########################################################
# OpenCV example
# By ChaiShushan 2008
###########################################################
 
import sys
 
# 导入OpenCV模块
 
from opencv.cv import *
from opencv.highgui import *
 
if __name__ == '__main__':
 
    if len(sys.argv) > 1:
 
        # 打开图像
 
        image = cvLoadImage(sys.argv[1])
        if not image: sys.exit(-1)
 
        # 创建窗口
 
        cvNamedWindow ("mywin")
 
        # 显示图像
 
        cvShowImage ("mywin", image)
        cvWaitKey (0)

注: Python版本由chai2010改写.

OpenCV 2.1 with Python 2.6 (use new interface)

# -*- coding:utf-8 -*-
# mycv.py
 
import sys
 
# 导入OpenCV模块
 
import cv
 
if __name__ == '__main__':
 
    # 打开图像
 
    image = cv.LoadImage ("lena.jpg")
 
    # 创建窗口
 
    cv.NamedWindow ("mywin")
 
    # 显示图像
 
    cv.ShowImage ("mywin", image)
    cv.WaitKey (0)
Views
Personal tools