// test 通过argc,argv进行图片读取
/*agrc (Argument count) 命令行参数个数 argv (argument value)命令行参数指针或者文件地址
这两个参数在opencv 到底是干什么用的呢 :argc 读取的那一个图片 比如第一个图像,第二个图像 就是argc=1 ,argc=2
注意第0个就是程序的执行文件 (.exe)
执行文件在C:\Users\User\Documents\Visual Studio 2008\Projects\test\Debug中的test.exe
agrv 是图像的路径 手工输入地址一次 这样就可以每次不用写入输入图像路径 比如要读取
argc=1的图像 就要在[项目] -> 属性页 -> 配置属性 -> 调试->命令参数 添加图片路径
C:\\Users\\User\\Pictures\\opencvfile\\公路1.jpg复制过去,如果读取其他图片要加空格然后 C:\\Users\\User\\Pictures\\opencvfile\\公路2.jpg
*/
#include "stdafx.h" //预编译头文件
#include <stdio.h>//标准输入输出如果需要用scanf 必须包含 ,此文没有用scanf 故此可以不写
#include "cv.h"
#include "highgui.h"
//#include <stdlib.h> //如果闪退加入
int main(int argc, char* argv[]) //agrc 命令行参数,char **argv=char*argv[]格式一样输哪个都可以
{
//显示argc ,argv
int i;
for (i=0; i < argc; i++)//当i小于argc 即参数个数时打印 afgc ,agrv
printf("Argument %d is %s.\n", i, argv[i]); //注意此处for循环只针对这个语句 因为argv是char型所有需要用%s
//判断argc参数是否正确
if (argc != 3) //参数个数必须为3如果不是 参数输入错误 return-1 :一般正常关闭时用return 0 异常关闭用 0
{
printf("argc error \n");
return -1; //谁调用就返回给谁
}
IplImage *img1 = cvLoadImage(argv[1]);//读取图像argv【1】第一个图片的地址 如下,将其复制到 [项目] -> 属性 -> 配置属性 -> 调试->命令参数
//IplImage *img1 = cvLoadImage(" C:\\Users\\User\\Pictures\\opencvfile\\公路1.jpg");//我习惯用这个进行读取可读性好啊
IplImage *img = cvLoadImage(argv[2]);//与argv[1]相同一样复制到那里 用空格分开
//显示图像
cvNamedWindow("img"); //建立窗口
cvShowImage("img", img);//显示图像
cvNamedWindow("img1");
cvShowImage("img1", img1);
cvWaitKey(0);//cvWaitKey()>=0时一直显示 》=0时显示图片的时间以毫秒为准
cvReleaseImage(&img);//释放图像资源
cvReleaseImage(&img1);
cvDestroyAllWindows();//释放所有窗口资源
//system("pause");//如果闪退加入
return 0;
}
[项目] -> 属性页 -> 配置属性 -> 调试->命令参数 添加图片路径
执行结果