OPENCV C++(三)二值化灰度函数+调用摄像头+鼠标响应+肤色检测

RGB转灰度函数

cpp 复制代码
cvtColor(image, gray, COLOR_BGR2GRAY);

图像 目标图像 rgb转灰度

大津法二值化函数

cpp 复制代码
threshold(gray, result1, 84, 255, THRESH_OTSU);

灰度图,目标图,阈值,大于阈值的转换的像素值,方法为大津法

自适应二值化

cpp 复制代码
adaptiveThreshold(gray, result2, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY,101,10);

灰度图,目标图,大于阈值的转换的像素值,自适应方法,二值化方法

虽然人物的信息丢失了很多,但是背景基本上被去掉了。丢失的人物的信息可以通过位运算等恢复。在去除背景提取前景方面,自适应阈值函数要有效很多。

blockSize:分割计算的区域大小,取奇数 C:常数,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数



创建滑动条改变变量

cpp 复制代码
	imshow("bar", gray);
	int lowth = 10;
	int maxth = 255;
	createTrackbar("thresold", "bar",&lowth, maxth, thresold_mat,&gray );

主函数中的写

第一行是展示窗口

lowth是起始位置大小 maxth是最大的大小

createTrackbar函数的参数是1 滑动条名称 2创建的窗口名字 3起始地址的位置 4最大值 5函数接口 6改变图像的地址

回调函数

cpp 复制代码
void thresold_mat(int th, void* data) {
	Mat src = *(Mat*)(data);
	Mat dst;
	threshold(src, dst, th, 255,THRESH_BINARY);
	imshow("bar", dst);
}

后面参数必须得一样 固定格式

传给指针给src src改变也会带动data改变

二值化函数 且显示目标图像

访问电脑摄像头

cpp 复制代码
VideoCapture cap(0);
while (1) {
    Mat frame;
    cap >> frame;
    imshow("frame", frame);
    waitKey(30);
}

waitkey是每隔30个时间单位就刷新一次画面

frame就是摄像头的画面 一帧画面

检测肤色

cpp 复制代码
VideoCapture cap(0);
	double i_minH = 0;
	double i_maxH = 20;
	double i_minS = 43;
	double i_maxS = 255;
	double i_minV = 55;
	double i_maxV = 255;

	while (1) {
		
		Mat frame;
		Mat hsvmat;
		Mat detectmat;
		cap >> frame;
		cvtColor(frame, hsvmat, COLOR_BGR2HSV);
		frame.copyTo(detectmat);
		inRange(hsvmat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), detectmat);
		
		imshow("frame", frame);
	
		imshow("detect", detectmat);
		waitKey(30);
	}

人体肤色的HSV的区间

cpp 复制代码
double i_minH = 0;
	double i_maxH = 20;
	double i_minS = 43;
	double i_maxS = 255;
	double i_minV = 55;
	double i_maxV = 255;

rgb转换HSV函数

cpp 复制代码
cvtColor(frame, hsvmat, COLOR_BGR2HSV);

复制图像另个函数表达

cpp 复制代码
frame.copyTo(detectmat);

检测区间颜色内的函数

cpp 复制代码
inRange(hsvmat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), detectmat);

在hsvmat图像中检测在区间内的,并二值化,将区间内的变成白色,其他为黑色,存入detectmat

相关推荐
K姐研究社16 小时前
飞书OpenClaw完整部署教程 – 3分钟组建 AI Agent 团队
人工智能·aigc·飞书
天若有情67316 小时前
反向封神!C++ 全局单例不避反用,实现无锁多线程函数独占访问
java·javascript·c++
QuestLab16 小时前
【第20期】2026年4月23日 AI日报
运维·服务器·人工智能
智者知已应修善业16 小时前
【51单片机调用__TIME__无法实时时间】2023-7-10
c++·经验分享·笔记·算法·51单片机
思绪无限16 小时前
YOLOv5至YOLOv12升级:快递包裹检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·快递包裹检测
学习论之费曼学习法16 小时前
AI 入门 30 天挑战 - Day 18 费曼学习法版 - 图像分割基础
人工智能·学习
凤凰院凶涛QAQ16 小时前
《C++转JAVA快速入手系列》:基本通用语法篇
java·开发语言·c++
花千树-01016 小时前
AI Agent 模型成本控制实战:Token 消耗优化与监控技巧
人工智能·agent·token·function call·ai agent·mcp·agent memory
千寻girling16 小时前
机器学习 | 逻辑回归 | 尚硅谷学习
java·人工智能·python·学习·算法·机器学习·逻辑回归
Mr数据杨16 小时前
AIGC工具箱安装与使用
人工智能·aigc·语音识别