opencv 边缘算子
两个边缘算子,闹半天……哦好吧其实是一天。
又回去学习了实参。形参。引用。构造。
1 #include<iostream> 2 #include <opencv2/opencv.hpp> 3 using namespace std; 4 using namespace cv; 5 6 void Xfilter(Mat kernel, Mat src, Mat dst); 7 void Yfilter(Mat kernel, Mat src, Mat dst); 8 int main() 9 { 10 Mat src,dst1,dst2; 11 12 Mat kernel1(3,3,CV_32F,cv::Scalar(0)); 13 kernel1.at<float>(0,0) = -1.0; 14 kernel1.at<float>(0,1) = -2.0; 15 kernel1.at<float>(0,2) = -1.0; 16 kernel1.at<float>(2,0) = 1.0; 17 kernel1.at<float>(2,1) = 2.0; 18 kernel1.at<float>(2,2) = 1.0; 19 20 Mat kernel2(3,3,CV_32F,cv::Scalar(0)); 21 kernel2.at<float>(0,0) = -1.0; 22 kernel2.at<float>(1,0) = -2.0; 23 kernel2.at<float>(2,0) = -1.0; 24 kernel2.at<float>(0,2) = 1.0; 25 kernel2.at<float>(1,2) = 2.0; 26 kernel2.at<float>(2,2) = 1.0; 27 28 29 src = imread("D:\\codeDemo\\abc\\pray2.jpg"); 30 31 if(!src.data ) 32 { 33 cout<<""<<endl; 34 return -1; 35 } 36 namedWindow("src"); 37 imshow("src",src); 38 39 dst1.create(src.size(),src.type()); 40 Xfilter(kernel1, src, dst1); 41 namedWindow("dst1"); 42 imshow("dst1",dst1); 43 44 dst2.create(src.size(),src.type()); 45 Yfilter(kernel2, src, dst2); 46 namedWindow("dst2"); 47 imshow("dst2",dst2); 48 49 waitKey(); 50 return 0; 51 } 52 void Xfilter(Mat kernel, Mat src, Mat dst) 53 { 54 filter2D(src,dst,src.depth(),kernel); 55 } 56 void Yfilter(Mat kernel, Mat src, Mat dst) 57 { 58 filter2D(src,dst,src.depth(),kernel); 59 }