1 #include "opencv2/imgproc/imgproc.hpp" 2 #include "opencv2/highgui/highgui.hpp" 3 #include <stdlib.h> 4 #include <stdio.h> 5 6 using namespace cv; 7 8 /// 全局变量 9 10 Mat src, src_gray; 11 Mat dst, detected_edges; 12 13 int edgeThresh = 1; 14 int lowThreshold; 15 int const max_lowThreshold = 100; 16 int ratio = 3; 17 int kernel_size = 3; 18 char* window_name = "Edge Map"; 19 20 /** 21 * @函数 CannyThreshold 22 * @简介: trackbar 交互回调 - Canny阈值输入比例1:3 23 */ 24 void CannyThreshold(int, void*) 25 { 26 /// 使用 3x3内核降噪 27 blur( src_gray, detected_edges, Size(3,3) ); 28 29 /// 运行Canny算子 30 Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size ); 31 32 /// 使用 Canny算子输出边缘作为掩码显示原图像 33 dst = Scalar::all(0); 34 35 src.copyTo( dst, detected_edges); 36 imshow( window_name, dst ); 37 } 38 39 40 /** @函数 main */ 41 int main( int argc, char** argv ) 42 { 43 /// 装载图像 44 src = imread( argv[1] ); 45 46 if( !src.data ) 47 { return -1; } 48 49 /// 创建与src同类型和大小的矩阵(dst) 50 dst.create( src.size(), src.type() ); 51 52 /// 原图像转换为灰度图像 53 cvtColor( src, src_gray, CV_BGR2GRAY ); 54 55 /// 创建显示窗口 56 namedWindow( window_name, CV_WINDOW_AUTOSIZE ); 57 58 /// 创建trackbar 59 createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold ); 60 61 /// 显示图像 62 CannyThreshold(0, 0); 63 64 /// 等待用户反应 65 waitKey(0); 66 67 return 0; 68 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)