一 摄像头的调用代码
二 读取图片并转为灰度图的代码
三 对图像求导
五.用高斯卷积核进行高斯模糊
- double sigma =50;
- Mat gauss(5, 5, CV_64FC1);
- for (int i = -2; i<3; i++)
- {
- for (int j = -2; j<3; j++)
- {
- gauss.at<double>(i + 2, j + 2) = exp(-(i*i + j*j) / (2 * sigma*sigma));
- }
- }
- //创建高斯模糊卷积核
- double gssum = sum(gauss).val[0];
- for (int i = -2; i<3; i++)
- {
- for (int j = -2; j<3; j++)
- {
- gauss.at<double>(i + 2, j + 2) /= gssum;
- }
- }
- //对卷积核归一化
- cout << gauss << endl;
- VideoCapture cap(0);
- while (true)
- {
- Mat frame;
- cap >> frame;
- cvtColor(frame, frame, CV_RGB2GRAY);
- Mat dimg = Mat(frame.rows - 4, frame.cols - 4, CV_8UC1);
- for (int i = 2; i < frame.rows - 2; i++)
- {
- for (int j = 2; j < frame.cols-2; j++)
- {
- double sum = 0;
- for (int m = 0; m < gauss.rows; m++)
- {
- for (int n = 0; n < gauss.cols; n++)
- {
- sum += (double)frame.at<uchar>(i + m - 2, j + n - 2)*gauss.at<double>(m,n);
- }
- }
- dimg.at<uchar>(i - 2, j - 2) = (uchar)sum;
- }
- }
- imshow("gauss", dimg);
- imshow("123", frame);
- waitKey(10);
- }
- VideoCapture cap(0);
- while (true)
- {
- Mat frame;
- cap >> frame;
- cvtColor(frame, frame, CV_RGB2GRAY);
- //GaussianBlur(frame, frame, cvSize(5, 5), 10, 10);
- //Canny(frame, frame, 100, 100);
- Sobel(frame, frame, 0, 1, 1);
- imshow("ddd",frame);
- waitKey(10);
- }
- system("pause");