<opencv学习> main函数中参数argc和argv含义及用法

opencv中main函数一般形式:int main(int argc, char** argv)

其中,argc是argumentcount的缩写,表示传入main函数的参数个数;

   argv 是argument vector的缩写,表示传入main函数的参数序列或指针。

argv数组下标从0开始,argc[0]表示程序编译后产生的exe文件的路径,数组的长度为argc。

以learning opencv书中例3-12为例,其代码如下:

//例3-12 用imageROI来增加某范围的像素
//Mr.Han
//2017.6.14

#include<cv.h>
#include<highgui.h>

int main(int argc, char** argv)
{
	IplImage* src;
	if (argc == 7 && (src = cvLoadImage(argv[1], 1)) != 0)
	{
		int x = atoi(argv[2]);
		int y = atoi(argv[3]);
		int width = atoi(argv[4]);
		int height = atoi(argv[5]);
		int add = atoi(argv[6]);
		cvSetImageROI(src, CvRect(x, y, width, height));
		cvAddS(src, cvScalar(add), src);
		cvResetImageROI(src);
		cvNamedWindow("ROI_ADD", 1);
		cvShowImage("ROI_ADD", src);
		cvWaitKey();
	}
	return 0;
}
编译后,在项目文件夹的Debug文件夹中找到example3_12.exe文件,将此文件的路径复制。

windows+R打开运行窗口,将路径复制到对话框(或者现在运行中输入cmd,打开窗口后输入)。空格后将要用于程序的图片路径粘贴。然后再分别输入程序中的剩余5个参数值,即起始坐标点(x,y),ROI(region of interest感兴趣区域)的宽度width和高度height,以及要增加的像素值。

此处文件路径:E:\PostgraduateEducation\OpenCV学习相关\Practice\learningopencv练习程序\chapter3\example3_12\Debug\example3_12.exe

图片路径:C:\Users\Administrator\Desktop\lena.jpg

ROI选取值及改变值为20 30 40 50 100

或者在cmd中输入


回车执行。即可得到下图所示,图中黑色圈出即为改变的ROI





OpenCV(计算机视觉库),`main(int argc, char* argv[])`是一个标准的C++程序入口点,用于接收命令行参数。如果你想让程序接受用户通过鼠标拖拽图片进来并读取,你需要做的是: 1. **包含必要的头文件**: ```cpp #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> ``` 2. **设置窗口模式**,并监听鼠标事件: ```cpp cv::namedWindow("Drag and Drop", cv::WINDOW_NORMAL); cv::setMouseCallback("Drag and Drop", mouse_callback_function, (void*)0); ``` 这里 `mouse_callback_function` 是一个回调函数,会在鼠标按下、移动和释放时被调用。 3. **编写鼠标拖拽回调函数**: ```cpp static void mouse_callback_function(int event, int x, int y, int flags, void* userdata) { if (event == cv::EVENT_LBUTTONDOWN) { // 记录下鼠标的起始位置 start_x = x; start_y = y; } else if (event == cv::EVENT_MOUSEMOVE && flags & cv::EVENT_FLAG_LBUTTON) { // 当鼠标左键按住时,计算图片应该显示的位置 int dx = x - start_x; int dy = y - start_y; // 然后在这两个坐标处放置image ROI( Region Of Interest) cv::imshow("Drag and Drop", src_roi(dx, dy, img.cols - dx, img.rows - dy)); } } ``` 4. **处理文件打开**: 当用户直接将文件拖到窗口上时,可以检查`argv`数组来获取图片路径: ```cpp for (int i = 1; i < argc; ++i) { std::string file_path = argv[i]; if (cv::imread(file_path)) { Mat img = imread(file_path); // ...然后将img传递给回调函数... } else { std::cout << "Failed to open image: " << file_path << std::endl; } } ``` 5. **最后别忘了关闭窗口**: ```cpp cv::waitKey(0); cv::destroyAllWindows(); ``` 记得替换`src_roi`为你实际处理ROI的部分,并且这个例子假设你已经有了一个名为`img`的Mat变量保存了原始图片。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值