首页 > 解决方案 > 使用 OpenCV 实时更改颜色

问题描述

我目前被分配了一项关于使用 OpenCV 实时更改某种颜色的任务,我能够配置为显示相机,并检测范围内的某些颜色,但坚持将颜色更改为另一种颜色。例如,在我的代码中,我检测到红色并想将其更改为蓝色。

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/videoio/videoio.hpp>
#include <iostream>

using namespace cv;
using namespace std;
int RoboX = 300;
int RoboY = 10;
Mat VRobo(Mat gbr, int arah);
int main()
{
    VideoCapture kameraku(0);
    Mat image;
    Mat image2;
    Mat hsv;
    Mat BW;
    Mat element;
    namedWindow("Kamera", WINDOW_AUTOSIZE);
    namedWindow("Convert", WINDOW_AUTOSIZE);
    while (1) {
        kameraku >> image;
        kameraku >> image2;
        imshow("Kamera", image);
        cvtColor(image2, hsv, CV_BGR2HSV);
        inRange(hsv, Scalar(0, 60, 60), Scalar(5, 255, 255), BW);
        element = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
        erode(BW, BW, element);
        erode(BW, BW, element);
        erode(BW, BW, element);
        dilate(BW, BW, element);
        dilate(BW, BW, element);
        dilate(BW, BW, element);
        imshow("Convert", BW);
        char c = (char)waitKey(25);
        if (c == 27) break;
    }
    kameraku.release();
    destroyAllWindows();
    return 0;
}

这是python代码:

import numpy as np

# Load the aerial image and convert to HSV colourspace
image = cv.imread("aerial.png")
hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)

# Define lower and uppper limits of what we call "brown"
brown_lo=np.array([10,0,0])
brown_hi=np.array([20,255,255])

# Mask image to only select browns
mask=cv.inRange(hsv,brown_lo,brown_hi)

# Change image to red where we found brown
image[mask>0]=(0,0,255)

cv.imwrite("result.png",image)```

标签: pythonc++opencvimage-processing

解决方案


推荐阅读