#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "std_msgs/Bool.h"
#include "std_msgs/Float32.h"
#include <geometry_msgs/Twist.h>
#include "sensor_msgs/Image.h"
#define LINEAR_X 0
using namespace cv;
using namespace std;
//筛选圆形区域,并计算面积,周长,圆心位置等
//对图像进行高斯模糊处理
void Gaussian(Mat input, Mat output, double sigma)
{
//设计高斯滤波模板。当sigma固定时,模板尺寸越大,图像越模糊
int MaskSize=3;
int center_k=MaskSize/2;
int center_l=MaskSize/2;
double sum=0; //模板权值之和
double mask[MaskSize][MaskSize];
//生成高斯滤波模板,对mask数组进行赋值操作
for (int k = 0; k < MaskSize; k++ ){
for (int l = 0; l < MaskSize; l++){
mask[k][l] = exp( -(1.0)*( ((k-center_k)*(k-center_k)+(l-
center_l)*(l-center_l))/(2.0*sigma*sigma)) );
sum += mask[k][l];
}
}
//归一化模板权值
for (int i = 0; i < MaskSize; i++){
for (int j = 0; j < MaskSize; j++){
mask[i][j] /= sum;
}
}
//将模板函数与图像进行卷积
for(int i=0;i<input.rows;i++){
for(int j=0;j<input.cols;j++){
double sum = 0;
for (int k = 0; k <MaskSize; k++){
for (int l = 0; l < MaskSize; l++){
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43