计算机视觉关于滤波的处理

一  摄像头的调用代码
     
  1. #include<opencv.hpp>  
  2. #include<iostream>  
  3. using namespace std;  
  4. using namespace cv;  
  5. void main()  
  6. {  
  7.     VideoCapture cap("0");//调用摄像头的一个opencv方法  
  8.     while (true){  
  9.         Mat frame;//创建一个矩阵  
  10.         cap >> frame;//把镜头的内容传给矩阵  
  11.         namedWindow("132", 0);//创建一个窗口  
  12.         imshow("132", frame);//把矩阵存的图像显示到窗口132  
  13.         waitKey(30);  //必不可少
  14.   }  
二  读取图片并转为灰度图的代码
  1.   Mat imagegrag=imread("30.jpg",1);//读一张图片,存入到矩阵,1为rgb三通道,0为灰度图  
  2. cvtColor(imagegrag, imagegrag, CV_RGB2GRAY);//将rgb三通道图转为灰度图  
  3. cout << (int)imagegrag.at<uchar>(1, 1) << endl;   
  4. imshow("123", imagegrag);  
三  对图像求导
  1. VideoCapture cap(0);  
  2. while (true)  
  3. {  
  4.     Mat frame;  
  5.     cap >> frame;  
  6.     cvtColor(frame, frame, CV_RGB2GRAY);  
  7.     cout << "row" << frame.rows << "col" << frame.cols << endl;//输出行和列  
  8.     Mat dimg = Mat(frame.rows, frame.cols - 2, CV_8UC1);  
  9.     for (int i = 0; i < frame.rows; i++)
  10. {  
  11.         for (int j = 1; j < frame.cols - 1; j++)
  12.         {  
  13.             dimg.at<uchar>(i,j-1)=frame.at<uchar>(i, j - 1) - frame.at<uchar>(i, j+1);  
  14.         }  
  15.  }  
四   用卷积的方法求导
  1. VideoCapture cap(0);  
  2. while (true)  
  3. {  
  4.     Mat frame;  
  5.     cap >> frame;  
  6.     cvtColor(frame, frame, CV_RGB2GRAY);  
  7.   
  8.       
  9.     Mat model = Mat(1, 3, CV_64FC1);//创建求导卷积核  
  10.     model.at<double>(0, 0) = -1;  
  11.     model.at<double>(0, 1) = 0;  
  12.     model.at<double>(0, 2) = 1;  
  13.     Mat dimg = Mat(frame.rows, frame.cols-2, CV_8UC1);  
  14.     for (int i = 0; i < frame.rows; i++)   
  15.     {  
  16.         for (int j = 1; j < frame.cols - 1; j++)
  17.         {  
  18.             int half = model.cols / 2;  
  19.             double sum = 0;//外两层便利图像每个像素点  
  20.             for (int m = 0; m < model.rows; m++)
  21.             {  
  22.                 for (int n = -half; n < model.cols-half; n++)
  23.                 {  
  24.                     sum += (double)frame.at<uchar>(i + m, j + n)*model.at<double>(m, n + half);//内俩层便利卷积核
  25.                 }  
  26.             }  
  27.             dimg.at<uchar>(i, j - 1) = (uchar)sum;  
  28.         }  
  29.     }  
  30.     imshow("123", dimg);  
  31.     waitKey(10);  
  32. }  
五.用高斯卷积核进行高斯模糊
  1. double sigma =50;  
  2.     Mat gauss(5, 5, CV_64FC1);  
  3.     for (int i = -2; i<3; i++)  
  4.     {  
  5.         for (int j = -2; j<3; j++)  
  6.         {  
  7.             gauss.at<double>(i + 2, j + 2) = exp(-(i*i + j*j) / (2 * sigma*sigma));  
  8.         }  
  9.     }  
  10. //创建高斯模糊卷积核  
  11.     double gssum = sum(gauss).val[0];  
  12.     for (int i = -2; i<3; i++)  
  13.     {  
  14.         for (int j = -2; j<3; j++)  
  15.         {  
  16.             gauss.at<double>(i + 2, j + 2) /= gssum;  
  17.         }  
  18.     }  
  19. //对卷积核归一化  
  20.     cout << gauss << endl;  
  21.     VideoCapture cap(0);  
  22.     while (true)  
  23.     {  
  24.         Mat frame;  
  25.         cap >> frame;  
  26.         cvtColor(frame, frame, CV_RGB2GRAY);  
  27.         Mat dimg = Mat(frame.rows - 4, frame.cols - 4, CV_8UC1);  
  28.         for (int i = 2; i < frame.rows - 2; i++)
  29.         {  
  30.             for (int j = 2; j < frame.cols-2; j++)
  31.             {  
  32.                 double sum = 0;  
  33.                 for (int m = 0; m < gauss.rows; m++)
  34.                 {  
  35.                     for (int n = 0; n < gauss.cols; n++)
  36.                     {  
  37.                         sum += (double)frame.at<uchar>(i + m - 2, j + n - 2)*gauss.at<double>(m,n);  
  38.                     }  
  39.                 }  
  40.                 dimg.at<uchar>(i - 2, j - 2) = (uchar)sum;  
  41.             }  
  42.         }  
  43.         imshow("gauss", dimg);  
  44.         imshow("123", frame);  
  45.         waitKey(10);  
  46. }  
六  简单方法进行高斯模糊与边缘检测
  1. VideoCapture cap(0);  
  2.     while (true)  
  3.     {  
  4.     Mat frame;  
  5.     cap >> frame;  
  6.     cvtColor(frame, frame, CV_RGB2GRAY);  
  7.     //GaussianBlur(frame, frame, cvSize(5, 5), 10, 10);  
  8.     //Canny(frame, frame, 100, 100);  
  9.     Sobel(frame, frame, 0, 1, 1);  
  10.     imshow("ddd",frame);  
  11.     waitKey(10);  
  12.     }  
  13.     system("pause");  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值