opencv_c++学习(十三)

这篇具有很好参考价值的文章主要介绍了opencv_c++学习(十三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、创建滑动条

opencv_c++学习(十三)

createTrackbar(const String & trackbarname, const String & winname, int* value, int count, onChange =, TrackbarCallback 0, void * userdata =0)

trackbarname:滑动条的名称。
winname:创建滑动条窗口的名称。
value:指向整数变量的指针,该指针指向的值反映滑块的位置,创建后,滑块位置由此变量定义。
count:滑动条的最大取值。
onChange:每次滑块更改位置时要调用的函数的指针。该函数应该原型为void Foo (int,void *) ;,其中第一个参数是轨迹栏位置,第二个参数是用户数据。如果回调是NULL指针,则不会调用任何回调,只更新数值。
userdata:传递给回调函数的可选参数。
滑动条创建样例如下:

//定义全局变量src
Mat src;

//回调函数,通过回调不断的显示新的图片
void callBack(int value, void*)
{
	float a = value / 100.0;
	Mat img2 = src * a;
	imshow("demo", img2);
}


int main() {

	src = imread("1.jpg");

	//显示图像
	namedWindow("demo");
	imshow("demo", src);

	//滑动条初始值
	int value = 100;

	//创建滑动条
	createTrackbar("百分比", "demo", &value, 600, callBack, 0);

	waitKey(0);
	return 0;
}

二、鼠标事件相应

setMouseCallback(const String & winname, MouseCallback onMouse,void * userdata = 0)

winname:添加鼠标响应的窗口的名字
onMouse:鼠标响应的回调函数。
userdata:传递给回调函数的可选参数。
回调函数:

typedef void(*cv::MouseCallback)(int event, int x, int y, int flags,void “userdata)

event:鼠标响应事件标志,参数为EVENT_*形式。
x:鼠标指针在图像坐标系中的x坐标。
y:鼠标指针在图像坐标系中的y坐标。
flags:鼠标响应标志,参数为EVENT_FLAG_*形式。
userdata:传递给回调函数的可选参数。
opencv_c++学习(十三)
opencv_c++学习(十三)
本节的样例如下:文章来源地址https://www.toymoban.com/news/detail-449709.html

Mat src;
Mat imgPoint;
Point prePoint;

void mouse(int event, int x, int y, int flags, void*)
{
	//如果单机右键
	if (event==EVENT_RBUTTONDOWN)
	{
		cout << "要使用左键" << endl;
	}

	//如果单机左键
	if (event == EVENT_LBUTTONDOWN)
	{
		prePoint = Point(x, y);
		cout << "起始坐标是" << prePoint << endl;
	}

	//鼠标按住左键移动
	if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON))
	{
		//绘制鼠标移动轨迹
		Point pt(x, y);

		//绘制直线
		line(src, prePoint, pt, Scalar(255, 255, 255), 2, 5, 0);

		//将当前位置信息赋值给前一时刻信息,方便下一时刻继续移动
		prePoint = pt;
		imshow("1", src);

		//通过改变图像像素显示鼠标移动轨迹
		imgPoint.at<Vec3b>(y, x) = Vec3b(255, 255, 255);
		imgPoint.at<Vec3b>(y, x - 1) = Vec3b(255, 255, 255);
		imgPoint.at<Vec3b>(y, x + 1) = Vec3b(255, 255, 255);
		imgPoint.at<Vec3b>(y + 1, x) = Vec3b(255, 255, 255);
		imgPoint.at<Vec3b>(y + 1, x) = Vec3b(255, 255, 255);
		imshow("2", imgPoint);
	}
}

int main(){

	//读取图片
	src = imread("1.jpg");

	if (!src.data)
	{
		printf("不能打开空图片");
		return -1;
	}

	//拷贝读入的图像
	src.copyTo(imgPoint);
	imshow("1", src);
	imshow("2", imgPoint);

	//鼠标响应
	setMouseCallback("1", mouse, 0);
	waitKey(0);
	return 0;

到了这里,关于opencv_c++学习(十三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv_c++学习(三)

    CV Assert(mylmage.depth() == CV 8U); CV_Assert()函数判断图像数据的类型是否为uchar类型,不满足则抛出异常。 Mat.ptr(int i=0)获取像素矩阵的指针,索引i表示第几行,从0开始计行数。 Mat.ptr(int i=0)获取像素矩阵的指针,索引i表示第几行,从0开始计行数。 获取当前像素点P(row, col)的像素值

    2024年02月03日
    浏览(24)
  • opencv_c++学习(二十一)

    轮廓检测函数: image:输入图像,数据类型为CV_8U的单通道灰度图像或者二值化图像。contours:检测到的轮廓,每个轮廓中存放着像素的坐标。 mode:轮廓检测模式标志。 method:轮廓逼近方法标志。 offset:每个轮廓点移动的可选偏移量。这个函数主要用在从ROI图像中找出的轮廓并基于

    2024年02月06日
    浏览(32)
  • opencv_c++学习(二十二)

    图中左侧为边缘检测的效果,中间为图像经过二值化的效果,右图为凸包检测效果。 points:输入的2D点集。 hull:输出凸包的顶点。 clockwise:方向标志,当参数为true时,凸包顺序为顺时针方向,否则为逆时针方向。 returnPoints:输出数据的类型标志,当参数为true时第二个参数输出的

    2024年02月06日
    浏览(56)
  • opencv_c++学习(二十五)

    1、海瑞斯角点不可能出现在图像平滑的区域(上图1); 2、图像边缘的支线出不可能出现海瑞斯角点(上图2); 3、海瑞斯角点会出现在顶点处。(上图3); 上图中的下半部分红色圆圈内就是海瑞斯角点常出现的地方。 如上图第一个式子,海瑞斯角点就是将窗口移动后的数

    2024年02月07日
    浏览(29)
  • opencv_c++学习(二十七)

    上图为针孔相机成像原理,蓝色坐标中的O即为镜头光心。成像原理与小孔成像相同。 单目相机映射关系如下: 将上式进行变换,就可以从三位空间映射到2维平面的公式。 相机的畸变公式如下: objectPoints:世界坐标系中3D点的三维坐标。 rvec:世界坐标系变换到相机坐标系的旋

    2024年02月06日
    浏览(42)
  • opencv_c++学习(二十八)

    如上图所示,根据图像的情况反推相机的运动情况。 如实现上述功能则需要拍摄当前物体的图像,然后拍摄一段时间之后物体的图像,然后联合两张图像则可以获取两个时刻的相机位姿关系。 位姿估计函数: objectPoints:前一时刻世界坐标系中的3D点的三维坐标。 imagePoints: 3

    2024年02月07日
    浏览(30)
  • 【OpenCV • c++】滑动条的创建和使用

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月07日
    浏览(30)
  • 树莓派(raspbian2)上开发OpenCv_C++

    最近刚好赶上学校的实训,学校请了一位大佬前来助阵,果然,有人带着你学比你自己闭门造车舒服多了,一直想学OpenCv,但是由于重重阻挠,Bug一个又一个,只看B站上的视频,让我两个多月只学会个搭环境!不说别的, linux树莓派上,OpenCV为啥打不开摄像头这个问题 ,我查遍了CSDN,百度,谷

    2024年02月09日
    浏览(26)
  • Const的区别 学习笔记

    C++程序设计之const八大用法_哔哩哔哩_bilibili const优先修饰const左边,若左边没有东西,则修饰右边的东西 前两个a,b不是指针由于修饰的是int,是类型,所以a和b的值不能改变 c的类型的指针,const修饰的是int,所以c可以指向其它地址,但是不能修改里面的值 首先c的const修饰的

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包