【OpenCV基础】基本阈值操作-设置双滑动条的方法

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处


一、基本阈值操作

阈值(threshold):图像分割的标尺,本次关于阈值的操作就是在之前学过的二值化基础上,对函数threshold的最后一个参数的研究。

二、API-threshold

图像的阈值操作函数原型如下:

double threshold( InputArray src, OutputArray dst, double thresh, double maxval,int type);

函数参数含义如下:

(1)InputArray类型的src ,输入图像,多通道、8位或32位浮点。

(2)OutputArray类型的dst ,输出图像,图像的大小、类型、通道数和输入图像相同。

(3)double类型的thresh,阈值。

(4)double类型的maxval,使用THRESH_BINARY 和THRESH_BINARY_INV阈值类型时候的最大值。

(5)int类型的type,阈值类型,取值参见:cv::ThresholdTypes,根据阈值进行分割,其方法包括:
1.二值化
2.反二值化
3.截断
4.阈值取零:小于阈值的像素取零
5.阈值反取零
在这里插入图片描述

三、部分代码-单滑动条

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

Mat src, dst;
void Threshold_Demo(int typeValue, void*)
{
	cvtColor(src, dst, COLOR_BGR2GRAY);
	threshold(dst, dst, 127, 255, typeValue);
	imshow("二值化图像", dst);
}

int main(){	
	src = imread("D:/images/lena.png");
	if (src.empty())
	{
		cout << "could not load image..." << endl;
		return -1;
	}
	imshow("原图", src);

	int a = 1;
	Threshold_Demo(0, 0);
	createTrackbar("Type Value", "二值化图像", &a, 4, Threshold_Demo);
	
	waitKey(0);
	return 0;
}

在这里插入图片描述

四、全部代码-双滑动条

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

//全局变量,主函数外的变量
Mat src, dst;
int thresholdValue = 127;
int thresholdMax = 255;
int typeValue = 2;
int typeMax = 4;//对应5种阈值分割的方法
const char* output_title = "binary img";//窗口名称“二值化图像”

//定义Threshold_Demo函数,用于图像的阈值
void Threshold_Demo(int, void*)
{
	threshold(src, dst, thresholdValue, thresholdMax, typeValue);
	imshow(output_title, dst);
}

//主函数入口
int main()
{
	src = imread("D:/images/lena.png");
	if (src.empty())
	{
		cout << "could not load image..." << endl;
		return -1;
	}
	imshow("原图", src);

	namedWindow(output_title, WINDOW_AUTOSIZE);
	createTrackbar("Threshold Value", output_title, &thresholdValue, thresholdMax, Threshold_Demo);//动态调整
	createTrackbar("Type Value", output_title, &typeValue, typeMax, Threshold_Demo);
	
	//调用Threshold_Demo函数
	Threshold_Demo(0, 0);
	imshow(output_title, dst);
	waitKey(0);
	return 0;
}

五、效果展示

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当使用OpenCV进行图像处理时,可以使用滑动条来调节HSV颜色空间的阈值。下面是一个示例代码,演示了如何创建一个窗口,并在窗口中添加滑动条来调节HSV阈值: ```python import cv2 def on_trackbar(val): pass # 创建一个空白图像 image = np.zeros((300, 300, 3), dtype=np.uint8) # 创建一个窗口 cv2.namedWindow('Threshold') # 创建滑动条 cv2.createTrackbar('Hue Min', 'Threshold', 0, 255, on_trackbar) cv2.createTrackbar('Hue Max', 'Threshold', 255, 255, on_trackbar) cv2.createTrackbar('Saturation Min', 'Threshold', 0, 255, on_trackbar) cv2.createTrackbar('Saturation Max', 'Threshold', 255, 255, on_trackbar) cv2.createTrackbar('Value Min', 'Threshold', 0, 255, on_trackbar) cv2.createTrackbar('Value Max', 'Threshold', 255, 255, on_trackbar) while True: # 获取滑动条的值 hue_min = cv2.getTrackbarPos('Hue Min', 'Threshold') hue_max = cv2.getTrackbarPos('Hue Max', 'Threshold') saturation_min = cv2.getTrackbarPos('Saturation Min', 'Threshold') saturation_max = cv2.getTrackbarPos('Saturation Max', 'Threshold') value_min = cv2.getTrackbarPos('Value Min', 'Threshold') value_max = cv2.getTrackbarPos('Value Max', 'Threshold') # 将图像转换为HSV颜色空间 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 创建一个掩膜,根据滑动条的值来阈值化图像 mask = cv2.inRange(hsv, (hue_min, saturation_min, value_min), (hue_max, saturation_max, value_max)) # 显示原始图像和阈值化后的图像 cv2.imshow('Original', image) cv2.imshow('Thresholded', mask) # 按下ESC键退出循环 if cv2.waitKey(1) == 27: break # 销毁窗口 cv2.destroyAllWindows() ``` 在这个示例代码中,我们首先创建了一个空白图像,并创建了一个名为"Threshold"的窗口。然后,我们使用`cv2.createTrackbar()`函数创建了六个滑动条,分别用于调节Hue、Saturation和Value的最小和最大阈值。每个滑动条都有一个回调函数`on_trackbar()`,但在这个示例中我们暂时不需要它,所以回调函数中只有一个空的`pass`语句。 在主循环中,我们使用`cv2.getTrackbarPos()`函数获取滑动条的当前值,并将图像转换为HSV颜色空间。然后,我们使用`cv2.inRange()`函数根据滑动条的值创建一个掩膜,将图像阈值化。最后,我们使用`cv2.imshow()`函数显示原始图像和阈值化后的图像。 你可以根据需要调整滑动条的初始值和范围,并在回调函数中添加适当的处理代码来实现你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌小超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值