用两个滑动条来控制滤波方式和滤波效果

#include<iostream>
#include<opencv2/opencv.hpp>
#define window1 "【结果1】"
#define window  "【原图 】"
#define window2 "【结果2】"
#define window3 "【结果3】"
#define window4 "【结果4】"
#define window5 "【结果5】"

using namespace std;
using namespace cv;

//2.3.
Mat src,dst;
int tbar = 1;
int maxtypebar = 2;//控制滤波类型。
int conttolbar = 3;
int maxctlbar = 40;//控制滤波效果,核的范围。
int x ;

void typeon(int,void*);
void ctlon(int,void*);
void process(void);

//用两个滑动条来控制滤波方式和滤波效果。
int main()
{
	//1.读取原图。
	src = imread("滤波图.jpg");
	resize(src,src,Size(),0.4,0.4);
	imshow(window,src);
	//2.123分别控制方框滤波,均值滤波,高斯滤波。
	//全局变量。
	//3.核的范围最大40.
	
	//4.创建process函数。

	//5.创建滑动条和回调函数。
	namedWindow(window1,1);//一定要注意,创建滑动条的时候,一定要定义窗口。
	createTrackbar("类型控制",window1,&tbar,2,typeon);
	typeon(tbar,0);
	createTrackbar("核大小控制",window1,&conttolbar,maxctlbar,ctlon);
	ctlon(conttolbar,0);






	waitKey();
	return 0;


}

//4.
void process()
{
	x = 2 * conttolbar + 1;
	if (tbar == 0)
	{
		boxFilter(src,dst,-1,Size(x, x));
		
	}
	else if(tbar==1)
	{
		blur(src,dst,Size(x,x));

	}
	
	else
	{
		GaussianBlur(src,dst, Size(x, x),0,0);

	}

	imshow(window1,dst);


}

void typeon(int, void*)
{
	process();
}

void ctlon(int,void*)
{
	process();
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于C#的代码示例: 首先需要在窗体添加两个PictureBox和两个Button,以及一个TrackBar控件,分别命名为pictureBox1、pictureBox2、button1、button2、trackBar1。 在button1的Click事件,我们可以使用OpenCvSharp库读取图片并进行线性滤波处理,然后将处理后的图片显示在pictureBox1: ```csharp private void button1_Click(object sender, EventArgs e) { // 读取图片 Mat srcImage = Cv2.ImRead("image.jpg"); // 进行线性滤波处理 Mat dstImage = new Mat(); Cv2.GaussianBlur(srcImage, dstImage, new Size(5, 5), 3); // 将处理后的图片显示在pictureBox1 pictureBox1.Image = BitmapConverter.ToBitmap(dstImage); } ``` 在button2的Click事件,我们可以将处理后的图片显示在pictureBox2: ```csharp private void button2_Click(object sender, EventArgs e) { // 获取pictureBox1图片 Bitmap bitmap = (Bitmap)pictureBox1.Image; // 将图片转换为Mat格式 Mat srcImage = BitmapConverter.ToMat(bitmap); // 进行线性滤波处理 Mat dstImage = new Mat(); Cv2.GaussianBlur(srcImage, dstImage, new Size(5, 5), 3); // 将处理后的图片显示在pictureBox2 pictureBox2.Image = BitmapConverter.ToBitmap(dstImage); } ``` 在trackBar1的ValueChanged事件,我们可以根据滑动的值来调节处理的强弱,这里我们以修改高斯滤波的半径为例: ```csharp private void trackBar1_ValueChanged(object sender, EventArgs e) { // 获取滑动的值 int value = trackBar1.Value; // 获取pictureBox1图片 Bitmap bitmap = (Bitmap)pictureBox1.Image; // 将图片转换为Mat格式 Mat srcImage = BitmapConverter.ToMat(bitmap); // 进行线性滤波处理,修改高斯滤波的半径 Mat dstImage = new Mat(); Cv2.GaussianBlur(srcImage, dstImage, new Size(value, value), 3); // 将处理后的图片显示在pictureBox2 pictureBox2.Image = BitmapConverter.ToBitmap(dstImage); } ``` 以上就是简单的示例代码,可以根据实际需要进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值