【发布时间】:2020-07-19 16:47:28
【问题描述】:
我目前正在研究一种视觉系统,以检测 .jpg 文件中的蓝莓
我想尝试编写显示三个窗口的代码,一个带有我的普通图像(未过滤)图像,一个带有一组控制 HSV 上限和下限的滑块,一个显示我过滤后的图像。
目前这是我的代码:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
Mat image;
Mat imgHSV;
Mat OutputImage;
int iLowH;
int iHighH;
int iLowS;
int iHighS;
int iLowV;
int iHighV;
static void HSVthreshold(int, int, int, int, int, int, void*)
{
inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), OutputImage);
}
int main(int argc, char** argv)
{
//Read image
image = imread("C:\\OpenCV-test-imgs\\blueberryTest2.jpg", 1);
if (image.empty())
{
cerr << "image was not read !" << endl;
return 1;
}
//convert RGB to HSV
cvtColor(image, imgHSV, COLOR_BGR2HSV);
//Create windows
namedWindow("image", WINDOW_FREERATIO); //window for original image
namedWindow("Control", WINDOW_AUTOSIZE); //window for HSV-control sliders
namedWindow("Output", WINDOW_AUTOSIZE); //window for output mask
//Create trackbars in "Control" window
createTrackbar("LowH", "Control", &iLowH, 179); //Hue (0 - 179)
createTrackbar("HighH", "Control", &iHighH, 179);
createTrackbar("LowS", "Control", &iLowS, 255); //Saturation (0 - 255)
createTrackbar("HighS", "Control", &iHighS, 255);
createTrackbar("LowV", "Control", &iLowV, 255); //Value (0 - 255)
createTrackbar("HighV", "Control", &iHighV, 255);
int key = 0;
while (key != 27) { // 27 is escape
HSVthreshold(iLowH, iHighH, iLowS, iHighS, iLowV, iHighV, 0);
imshow("Output", OutputImage);
imshow("image", imgHSV);
key = waitKey(1); // wait at most 1 ms for input, if nothing was pressed result is -1
}
return 0;
}
我有我正在寻找的三个窗口,但滑块似乎没有做任何事情。 有谁知道解决这个问题的方法。
抱歉,如果我不了解 OpenCV 中的简单内容,我对此很陌生。
编辑:我稍微编辑了代码以消除一些错误。
Edit2:更新代码,包含错误消息
Edit3:更新的代码,现在可以工作了!,删除了错误消息
【问题讨论】:
标签: c++ opencv object-detection