使用OpenCV识别图像色值
本章节为 如何利用OpenCV识别图片色值
-- 颜色操作部分开始
-- 读取名为 "zs.png" 的图像,并将其存储在变量 img 中
local img = imread("zs.png")
-- 复制 img 图像,将副本存储在 img2 变量中
local img2 = cloneMat(img)
-- 颜色空间转换部分
-- 将图像的颜色空间从 BGRA 转换为 RGB,55 代表 CV::COLOR_BGRA2RGB(在 cv 版本 460 中)
cvtColor(img, 55)
-- 再次进行颜色空间转换
-- 将图像的颜色空间从 BGR 转换为 HSV,40 代表 cv::COLOR_BGR2HSV
cvtColor(img, 40)
-- 颜色范围筛选部分
-- 对图像进行颜色范围筛选,筛选出 HSV 颜色值在指定范围内的像素
-- 这里的范围是:H 通道 140 - 150,S 通道 110 - 195,V 通道 150 - 255
inRange(img, 140,110,150, 150,195,255)
-- 形态学操作部分
-- 创建一个形态学核,核的形状为矩形(0 代表 MORPH_RECT),大小为 4x4
local kernel = getStructuringElement(0, 4,4)
-- 对图像进行膨胀操作,使用前面创建的核
-- anchor 为 (-1, -1) 表示核的中心位置,迭代次数为 5 次
dilate(img, kernel, -1, -1, 5)
-- 对图像进行二值化处理,阈值为 60,最大值为 255,二值化类型为 THRESH_BINARY(0)
threshold(img, 60, 255, 0)
-- 轮廓检测部分
-- 找出图像中的轮廓,检测模式为 RETR_EXTERNAL(0),轮廓近似方法为 CHAIN_APPROX_NONE(1)
local contours = findContours(img, 0, 1)
-- 处理检测到的轮廓
-- 假设已经调用 findContours 得到了 contours
-- contours[i] 是第 i 个轮廓 (table)
if #contours > 0 then
-- 打印找到的轮廓数量
print("找到轮廓数量:", #contours)
-- 遍历所有检测到的轮廓
for i, contour in ipairs(contours) do
-- 计算当前轮廓的外接矩形
local rect = boundingRect(contour)
if rect then
-- 打印外接矩形的位置和大小
print("外接矩形:", rect.x, rect.y, rect.width, rect.height)
-- 注释掉的代码,用于在 img2 图像上绘制外接矩形
-- 矩形颜色为黄色(0, 255, 255),线宽为 1
--drawRectangle(img2, rect.x, rect.y, rect.width, rect.height, 0,255,255, 1)
end
end
end
-- 注释掉的代码,用于显示 img2 图像在名为 "myWindow" 的窗口中
--imshow("myWindow", img2)
-- 注释掉的代码,等待用户按键,参数 0 表示无限等待
--waitKey(0)