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