OpenCV学习 1 图像的缩小、灰度化及边缘检测

本文是作者学习OpenCV的初步尝试,介绍了图像的缩小、灰度化及边缘检测的基础操作。讨论了使用#include<opencv2/opencv.hpp>的优缺点,以及在命名空间和窗口管理上的注意事项。通过示例代码展示了namedWindow()和imshow()函数的使用,强调了窗口名称的一致性和调整窗口大小的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV学习 1 图像的缩小、灰度化及边缘检测

一、学习历程
本文为小僧第一篇博文可能内容较为简洁(当然以后也会这么简洁,深奥的小僧也不懂_),只是做一个初步的尝试,为以后写文章做准备。同时也希望能和同道中人多加交流,彼此学习,共同进步。
本文讲述刚开始学习OpenCV时的一些基础操作及代码演示,同时对代码做一定的讲解和其中一些小疑点。在小僧刚开始学习OpenCV时四处碰壁,简直上天入地,额,简直叫天天不应叫地地不灵。(其实现在也是(╥﹏╥))那好吧自己选的坑,跪着也要填完。互吹完毕,下面开始。
二、本篇内容
(1)我们都知道在OpenCV中有个头文件#include<opencv2\opencv.hpp>非常好用,几乎只要这个就没其他头文件什么事了。其实对于刚开始学习的时候是这样,因为这样确实节省了敲代码的时间。然而随着学习的深入也逐渐发现了一些端倪,如果使用这个统一的头文件在很多时候会拖累编译的速度,若使用#include<opencv2\highgui.hpp>;或其他直属头文件则会大大加快编译速度。因此有利也有弊,如何取舍,见仁见智。
(2)OpenCV的函数都在cv的命名空间下,如果想要调用OpenCV函数需要在每一个函数前面加cv::向编译器说明才行,但这样过于麻烦,为了避免这种傻瓜式的设计我们可以在函数前加上using namespace cv;就直接告诉编译器接下去的函数都是在cv命名空间下的。
(3)namedWindow();这玩意儿一开始直接被小僧忽略了,因为在OpenCV中imread可以自动形成窗口,当时觉得占了大便宜开心的八达鸟,所以在后面的操作中吃了大亏,其实这函数对于刚开始学的人来说比如只要求简单的显示图像确实是可以忽略的。但是在后来的操作中需要在图像上加滑动条或者多张图像的混合处理时这个函数就发挥了极大的作用,他就像一道光一样照亮了前方的路。
接着我们说说这个函数的一些小问题,比如下面的代码namedWindow(“图”,WINDOW_AUTOSIZE);imshow(“图1”,tu);在这两句中如果引号中的字不一样(一个是“图”,一个是“图1”)会发生什么。(看图说话)
这就是后果它会重新在显示一个窗口给imread()函数使用
如果是正常的就跟下图一样
只有一个窗口才是对的
如果哪天你发现突然多了一个莫名其妙的窗口那应该就是这个问题。所以我们必须要保证引号中的字符要一毛一样,多个空格都不行
另外该函数的第二个参数一般用两种形式表示WINDOW_AUTOSIZE或者WINDOW_NORMAL;对于前者WINDOW_AUTOSIZE是不能手动拉伸的计算机给你多大的窗你就有多大的疮。这也有可能产生一些小问题比如下图:可以看出灰度图太大图像不能完全显示,且不能手动修改
可以看出灰度图太大图像不能完全显示,且不能手动修改
那么这时候可以用WINDOW_NORMAL;可以手动拉伸其大小,想多小就多小。
可以手动拉伸其大小,想多小就多小
三、小结
好吧,时间原因今天暂时交流这么多(其实还有时间只是想去打球了)
在这里插入图片描述
接下去要说的也比较简单,代码中有解释,聪明如柳无须解释。

//代码借鉴《学习OpenCV3 》
#include<opencv2\opencv.hpp>
using namespace cv;

int main(){
	Mat tu1,tu2,tu3,tu4;
	namedWindow("图1",WINDOW_AUTOSIZE);
	namedWindow("图2",WINDOW_AUTOSIZE);
	namedWindow("图3",WINDOW_AUTOSIZE);
	namedWindow("图4",WINDOW_NORMAL);
	//原图显示
	tu1=imread("猪2.jpg");
	imshow("图1",tu1);
	//将原图的长宽缩小一半
	pyrDown(tu1,tu2); //pyrDown是将原图的长和宽变为原来的一半;
	imshow("图2",tu2);
	//彩色图转灰度图
	cvtColor(tu2,tu3,COLOR_BGR2GRAY);
	imshow("图3",tu3);
	//边缘检测
	Canny( tu3,tu4,10,100,3,true);
	imshow("图4",tu4);


	  waitKey(0);

	  return 0;
}

在这里插入图片描述
北京时间21:21 乒乓时间到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值