图像文件读入和显示
Wikipedia,自由的百科全书
(修订版本间差异)
16:45 2012年4月18日的修订版本 Zhangyf90 (Talk | 贡献) C语言版本 ← Previous diff |
当前修订版本 Sn0371410 (Talk | 贡献) 论坛常见问题 |
||
第 15行: | 第 15行: | ||
//载入图像 | //载入图像 | ||
if( argc == 2 && | if( argc == 2 && | ||
- | (pImg = cvLoadImage( argv[1], 1)) != 0 )//[[此处的argc==2是否需要改成argc==1?我改了之后才能运行成功。求大牛解惑]] | + | (pImg = cvLoadImage( argv[1], 1)) != 0 )//[[此处的argc==2是否需要改成argc==1?我改了之后才能运行成功。求大牛解惑]] // wmzzzz : 在"属性"|"debug"|里的command arguments 里加入参数(一个路径:要打开的文件路径) 这时 argc==2 就合理了...可以试试多加几个 |
{ | { | ||
cvNamedWindow( "Image", 1 );//创建窗口 | cvNamedWindow( "Image", 1 );//创建窗口 | ||
第 37行: | 第 37行: | ||
cvLoadImage( filename, 1 );读取彩色图 | cvLoadImage( filename, 1 );读取彩色图 | ||
==论坛常见问题== | ==论坛常见问题== | ||
- | # 如果你对main函数的参数 '''argc argv''' 不了解,请看[[Main函数参数argc,argv说明]] | + | #opencv 在VC6.0 环境下加载一幅 图片 ,为什么窗口显示总为整个屏幕显示,且是图像变形了?代码应该没有 问题 的,我是照着视频资料上写的,可就是运行后图像显示变形了。请哪位高手指点一下#include "stdafx.h" |
- | #[http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=5164&start=0&st=0&sk=t&sd=a 无法打开 图片,C语言字符串 问题] | + | #include "cv.h" |
- | #[http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4246&start=0&st=0&sk=t&sd=a&hilit=cvloadimage+unicode unicode 的 问题,导致图片无法打开] | + | #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; | ||
+ | } | ||
+ | |||
+ | 如何显示图像 的 原始大小? | ||
= C++语言版本 based on OpenCV 2.1 = | = C++语言版本 based on OpenCV 2.1 = | ||
第 55行: | 第 71行: | ||
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||
{ | { | ||
- | Mat img = imread("lena.jpg"); //声明Mat变量并调入lena 小妞(老妞了现在?) 的照片 | + | Mat img = imread("lena.jpg"); //声明Mat变量并调入lena的照片 |
if(!img.data) //判断图片调入是否成功 | if(!img.data) //判断图片调入是否成功 | ||
- | return -1; //调入图片失败则退出 | + | return -1; //调入图片失败则退出 |
+ | //创建窗口,并确定其为大小不可变类型窗口 | ||
+ | namedWindow("loveLena", CV_WINDOW_AUTOSIZE); | ||
- | namedWindow("loveLena", CV_WINDOW_AUTOSIZE); //创建窗口,并确定其为大小不可变类型窗口 | + | //显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow可以直接创建窗口 |
- | + | imshow("loveLena", img); | |
- | imshow("loveLena", img); //显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow可以直接创建窗口 | + | |
waitKey(); //等待按键 | waitKey(); //等待按键 | ||
第 85行: | 第 102行: | ||
int main() | int main() | ||
{ | { | ||
- | string imagename = "lena.jpg"; | + | string imagename = "lena.jpg"; //此处需要填写绝对地址,我测试时使用相对地址出错。 |
//读入图像 | //读入图像 | ||
第 106行: | 第 123行: | ||
return 0; | return 0; | ||
+ | |||
+ | //错误指出: feihongmeilian | ||
+ | //经本人验证,string imagename = "lena.jpg"; 处是可以使用相对地址,本人使用环境为OpenCV 2.4.3 | ||
+ | //图片为meinv.jpg置于代码文件所在文件夹的上一级文件夹中,string imagename = "..\\meinv.jpg" 图片可正常显示。 | ||
+ | //需提醒注意的是 双引号“” 中出现的第一个 斜杠 \ 被视作转义字符 | ||
} | } | ||
</source> | </source> | ||
第 112行: | 第 134行: | ||
#在于可以尽量避免使用指针这种危险的东西了。 | #在于可以尽量避免使用指针这种危险的东西了。 | ||
#另一个好处便在于,不用费心去release资源了,因为在其destructor里面,系统会自动帮你搞定。 | #另一个好处便在于,不用费心去release资源了,因为在其destructor里面,系统会自动帮你搞定。 | ||
+ | |||
+ | |||
+ | wmzzzz: | ||
+ | 死PP了...运行这个程序, Mat img = imread(imagename); 这行报以下错 | ||
+ | Unhandled exception at 0x7854fdf1 in WmTestOpencv.exe: 0xC0000005: Access violation reading location 0xcccccccc. | ||
+ | 好像是环境问题..我用C版本的没有问题..文件路径也没有错 | ||
+ | 求解..这是怎么回事啊??? | ||
= Python版本 = | = Python版本 = |
当前修订版本
来自于仕琪的讲稿《使用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 );读取彩色图
[编辑]
论坛常见问题
- 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; }
如何显示图像的原始大小?
[编辑]
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++版本的好处
- 在于可以尽量避免使用指针这种危险的东西了。
- 另一个好处便在于,不用费心去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)