使用c++视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测
 
#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);
	
	cv::Mat cannyEdges;
	cv::Canny(image, cannyEdges, 50, 150); 
	
	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);
	
	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 <opencv2/opencv.hpp>
int main() {
	cv::VideoCapture cap(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);
		
		cv::Mat cannyEdges;
		cv::Canny(grayImage, cannyEdges, 50, 150); 
		
		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);
		
		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);
		
		if (cv::waitKey(1) == 27) {
			break;
		}
	}
	return 0;
}