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

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

cpp 复制代码
#include <opencv2/opencv.hpp>

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;
}

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

cpp 复制代码
#include <opencv2/opencv.hpp>

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;
}
相关推荐
_Chipen1 小时前
C++基础问题
开发语言·c++
加油吧zkf1 小时前
Conda虚拟环境管理:从入门到精通的常用命令
图像处理·深度学习·计算机视觉·conda
灿烂阳光g1 小时前
OpenGL 2. 着色器
c++·opengl
AA陈超2 小时前
虚幻引擎UE5专用服务器游戏开发-20 添加基础能力类与连招能力
c++·游戏·ue5·游戏引擎·虚幻
小宋0012 小时前
使用LLaMA-Factory微调Qwen2.5-VL-3B 的目标检测任务-数据集格式转换(voc 转 ShareGPT)
人工智能·目标检测·计算机视觉
小哥谈3 小时前
论文解析篇 | YOLOv12:以注意力机制为核心的实时目标检测算法
人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
mit6.8243 小时前
[Meetily后端框架] AI摘要结构化 | `SummaryResponse`模型 | Pydantic库 | vs marshmallow库
c++·人工智能·后端
R-G-B3 小时前
【02】MFC入门到精通——MFC 手动添加创建新的对话框模板
c++·mfc·mfc 手动添加创建新的对话框
小宋0013 小时前
在Ubuntu上安装配置 LLaMA-Factory
ubuntu·计算机视觉
linux kernel3 小时前
第七讲:C++中的string类
开发语言·c++