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

调用本地相机实时检测: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;
}

你可能感兴趣的:(#,C++视觉处理,c++,计算机视觉,opencv)