gpt4 book ai didi

image - 如何使用opencv比较HSV色彩空间中的两个图像?

转载 作者:行者123 更新时间:2023-12-02 16:39:28 24 4
gpt4 key购买 nike

我正在做一个涉及手势识别的项目。
识别手势并确定其代表的字母。我能够使用HSV颜色空间检测皮肤。
所有字母手势和所有字母手势的图像。现在我有了
找出哪个手势代表哪个字母。我需要知道
将视频每个帧中的手势与图像手势进行比较。
是opencv的新手,请有人帮助我。这是我的代码

#include <opencv2\opencv.hpp>

using namespace cv;
using std::cout;

/*--------------- SKIN SEGMENTATION ---------------*/
int main() {

VideoCapture cap("E:\\videotest.mp4");

if (!cap.isOpened())
{// check if we succeeded
printf("coundnotoepn");
return -1;
}
Mat3b frame;
while (cap.read(frame)){

/* THRESHOLD ON HSV*/
cvtColor(frame, frame, CV_BGR2HSV);
GaussianBlur(frame, frame, Size(7, 7), 1, 1);
medianBlur(frame, frame, 15);
for (int r = 0; r<frame.rows; ++r){
for (int c = 0; c<frame.cols; ++c)
// 0<H<0.25 - 0.15<S<0.9 - 0.2<V<0.95
if ((frame(r, c)[0]>5) && (frame(r, c)[0] < 17) && (frame(r, c)[1]>38) && (frame(r, c)[1]<250) && (frame(r, c)[2]>51) && (frame(r, c)[2]<242)); // do nothing
else for (int i = 0; i<3; ++i) frame(r, c)[i] = 0;
}

/* BGR CONVERSION AND THRESHOLD */
Mat1b frame_gray;
cvtColor(frame, frame, CV_HSV2BGR);
cvtColor(frame, frame_gray, CV_BGR2GRAY);
threshold(frame_gray, frame_gray, 60, 255, CV_THRESH_BINARY);
morphologyEx(frame_gray, frame_gray, CV_MOP_ERODE, Mat1b(3, 3, 1), Point(-1, -1), 3);
morphologyEx(frame_gray, frame_gray, CV_MOP_OPEN, Mat1b(7, 7, 1), Point(-1, -1), 1);
morphologyEx(frame_gray, frame_gray, CV_MOP_CLOSE, Mat1b(9, 9, 1), Point(-1, -1), 1);

medianBlur(frame_gray, frame_gray, 15);
// imshow("Threshold", frame_gray);

cvtColor(frame, frame, CV_BGR2HSV);
resize(frame, frame, Size(), 0.5, 0.5);
imshow("Video", frame);



Mat3b image;
image = imread("E:/hand.jpg", CV_LOAD_IMAGE_COLOR); // Read the file

if (!image.data) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl;
return -1;
}
cvtColor(image, image, CV_BGR2HSV);
//printf("%d", image(2, 3)[5]);
//resize(image,image, Size(), 0.5, 0.5);
namedWindow("Display window", WINDOW_AUTOSIZE);// Create a window for display.
imshow("Display window", image); // Show our image ins
waitkey(1);
}

最佳答案

有几种方法可以解决此问题,最广泛使用且最明显的方法是跟踪每个单独的手指(或手的指尖部位)并编写某些规则以对每个手势进行分类(即,两个手指指向手指的顶部上方)手可能是“和平”符号或其他东西)

您可以通过跟踪凸包缺陷来做到这一点。 Here 是使用Python编写的解释该过程的教程的链接,但我确定一旦了解逻辑就可以将其移植到C++。

但是,如果您已经有了每个手势的图像,我建议您使用神经网络进行分类,请尝试并处理已有的图像,以使其类似于您要分类的图像(即进行皮肤检测和对图像进行二值化)

Here 是本教程的另一个链接,该教程解释了什么是神经网络,它们如何工作以及如何在C++中实现图像识别网络。

我必须提到,很有可能每个像素都将用作网络的输入,因此,为了减轻它的负担(并使其更快地训练),我建议调整图像的大小以使其尽可能小(但是您可以仍然做出手势)

希望这些信息对您有所帮助,祝您好运!

关于image - 如何使用opencv比较HSV色彩空间中的两个图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com