• 使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测


    使用c++视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

    #include 
    
    int main() {
    	// 读取图像
    	cv::Mat image = cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像
    
    	if (image.empty()) {
    		std::cerr << "无法加载图像" << std::endl;
    		return -1;
    	}
    
    	// 创建用于显示结果的窗口
    	cv::namedWindow("边缘检测结果", cv::WINDOW_AUTOSIZE);
    
    	// Canny边缘检测
    	cv::Mat cannyEdges;
    	cv::Canny(image, cannyEdges, 50, 150); // 50和150是低阈值和高阈值
    
    	// Sobel边缘检测
    	cv::Mat sobelX, sobelY;
    	cv::Sobel(image, sobelX, CV_16S, 1, 0);
    	cv::Sobel(image, sobelY, CV_16S, 0, 1);
    	cv::Mat sobelEdges;
    	cv::convertScaleAbs(sobelX, sobelX);
    	cv::convertScaleAbs(sobelY, sobelY);
    	cv::addWeighted(sobelX, 0.5, sobelY, 0.5, 0, sobelEdges);
    
    	// Scharr滤波边缘检测
    	cv::Mat scharrX, scharrY;
    	cv::Scharr(image, scharrX, CV_16S, 1, 0);
    	cv::Scharr(image, scharrY, CV_16S, 0, 1);
    	cv::Mat scharrEdges;
    	cv::convertScaleAbs(scharrX, scharrX);
    	cv::convertScaleAbs(scharrY, scharrY);
    	cv::addWeighted(scharrX, 0.5, scharrY, 0.5, 0, scharrEdges);
    
    	// 显示结果
    	cv::imshow("原始图像", image);
    	cv::imshow("Canny边缘检测", cannyEdges);
    	cv::imshow("Sobel边缘检测", sobelEdges);
    	cv::imshow("Scharr边缘检测", scharrEdges);
    
    	cv::waitKey(0);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    在这里插入图片描述

    调用本地相机实时检测:canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

    #include 
    
    int main() {
    	cv::VideoCapture cap(0); // 打开本地相机(通常是0号摄像头)
    
    	if (!cap.isOpened()) {
    		std::cerr << "无法打开相机" << std::endl;
    		return -1;
    	}
    
    	// 创建用于显示结果的窗口
    	cv::namedWindow("实时边缘检测", cv::WINDOW_AUTOSIZE);
    
    	while (true) {
    		cv::Mat frame;
    		cap >> frame; // 从相机捕获一帧图像
    
    		if (frame.empty()) {
    			std::cerr << "无法捕获图像" << std::endl;
    			break;
    		}
    
    		// 转换为灰度图像
    		cv::Mat grayImage;
    		cv::cvtColor(frame, grayImage, cv::COLOR_BGR2GRAY);
    
    		// Canny边缘检测
    		cv::Mat cannyEdges;
    		cv::Canny(grayImage, cannyEdges, 50, 150); // 50和150是低阈值和高阈值
    
    		// Sobel边缘检测
    		cv::Mat sobelX, sobelY;
    		cv::Sobel(grayImage, sobelX, CV_16S, 1, 0);
    		cv::Sobel(grayImage, sobelY, CV_16S, 0, 1);
    		cv::Mat sobelEdges;
    		cv::convertScaleAbs(sobelX, sobelX);
    		cv::convertScaleAbs(sobelY, sobelY);
    		cv::addWeighted(sobelX, 0.5, sobelY, 0.5, 0, sobelEdges);
    
    		// Scharr滤波边缘检测
    		cv::Mat scharrX, scharrY;
    		cv::Scharr(grayImage, scharrX, CV_16S, 1, 0);
    		cv::Scharr(grayImage, scharrY, CV_16S, 0, 1);
    		cv::Mat scharrEdges;
    		cv::convertScaleAbs(scharrX, scharrX);
    		cv::convertScaleAbs(scharrY, scharrY);
    		cv::addWeighted(scharrX, 0.5, scharrY, 0.5, 0, scharrEdges);
    
    		// 显示实时边缘检测结果
    		cv::imshow("原始图像", frame);
    		cv::imshow("Canny边缘检测", cannyEdges);
    		cv::imshow("Sobel边缘检测", sobelEdges);
    		cv::imshow("Scharr边缘检测", scharrEdges);
    
    		// 检查用户是否按下ESC键,然后退出循环
    		if (cv::waitKey(1) == 27) {
    			break;
    		}
    	}
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
  • 相关阅读:
    【MySQL基础】数据库系统之关系型数据库与非关系型数据库
    多模态大模型NextGPT整体结构图、模型示意图和使用模型时示意图
    js常见算法及算法思想-分而治之
    【框架】跨端开发框架介绍(Windows/MacOS/Linux/Andriod/iOS/H5/小程序)
    架构设计流程
    「影视解说」三联屏封面超详细制作方法,全网最简单三连视频封面
    Java TCP长连接详解:实现稳定、高效的网络通信
    文件包含漏洞培训
    【开源教程17】疯壳·开源编队无人机-PID 基础原理
    婴儿摇铃玩具亚马逊审查要求做CPC认证标准要求
  • 原文地址:https://blog.csdn.net/qq_46107892/article/details/133761708