opencv利用HSV提取图像特定颜色部分

示例代码

#include <stdio.h>
#include "opencv2/opencv.hpp"

using namespace cv;

VideoCapture cam;
Mat frame;

int cameraInit()
{
    cam.open(0);
    if (!cam.isOpened())
    {
        printf("Can not open camera!\n");
        return -1;
    }
    cam.set(CAP_PROP_FRAME_WIDTH, 1200);
    cam.set(CAP_PROP_FRAME_HEIGHT, 700);
    cam.read(frame);
    printf("camera frame size:%d,%d\n", frame.cols, frame.rows);
    return 0;
}

int main()
{
    if (cameraInit() != 0)
    {
        printf("Camera error!\n");
        return -1;
    }

    namedWindow("camera", WINDOW_FREERATIO);
    namedWindow("after", WINDOW_FREERATIO);

    Mat mask;

    // 获取图像并显示
    while (true)
    {
        cam.read(frame);
        flip(frame, frame, 1);
        imshow("camera", frame);
        Mat frameHSV;
        // 把色彩空间转为HSV
        cvtColor(frame, frameHSV, COLOR_BGR2HSV);
        inRange(frameHSV, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
        // mask取反
        // bitwise_not(mask, mask);
        // 红色背景
        Mat redBack = Mat::zeros(frame.size(), frame.type());
        redBack = Scalar(0, 0, 255);
        // 把mask部分为白色的地方的frame部分拷贝到redBack上
        frame.copyTo(redBack, mask);
        imshow("after", redBack);
        if (waitKey(1) == '1')
        {
            break;
        }
    }
    return 0;
}

运行效果

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值