Я пытаюсь выполнить некоторую базовую сегментацию изображения. Пороговые значения для HSV должны определяться по значению пикселя, на которое нажимается мышь. Я не могу заставить его работать. Вот что я написал до сих пор:Сегментация HSV на основе щелчка мыши
#include <iostream>
#include "opencv2/opencv.hpp"
#include <cv.h>
#include "opencv/highgui.h"
using namespace std;
using namespace cv;
Mat edges,frame,bw,hsv,dst,src_gray,probabilistic_hough, HSV_image;
int H=110,S=40,V=140;
int border=80;
int linethreshold=180,linelengthslider=30,linegapslider=3, HT_threshold=10;
int min_threshold = 50;
void printHSVValues(int event, int x, int y, int, void*);
void changeborder(int, void*);
Scalar hsvlow(0,0,0),hsvhigh(180,255,255);
int c=0;
void printHSVValues(int event, int x, int y, int, void*);
int main (int argc, char **argv)
{
VideoCapture cap(1);
namedWindow("edges",1);
namedWindow("segmented",1);
setMouseCallback("edges", printHSVValues, 0);
while (c != 'q') {
cap >> frame;
imshow("edges",frame);
c= (char)waitKey(100);
}
return 0;
}
void printHSVValues(int event, int x, int y, int, void*){
int loop;
float change;
if(event == EVENT_LBUTTONDOWN) {
cvtColor(frame, HSV_image, CV_BGR2HSV);
Vec3b p = HSV_image.at<float>(y,x);
for (loop=0;loop<3;loop++) {
change=p[loop]*0.01;
hsvlow[loop] = p[loop] - change;
hsvhigh[loop] = p[loop] + change;
}
inRange(HSV_image, hsvlow,hsvhigh,bw);
imshow("segmented",bw);
}
}
Куда я перепутал? Заранее спасибо.
DY.
Как это работает? Пожалуйста, будьте более конкретными. – herohuyongtao
Вы можете изменить строку 'Vec3b p = HSV_image.at (y, x);' to 'Vec3b p = HSV_image.at (y, x);' Также убедитесь, что вы вычисляете правильное значение HSV –
Haris
@herohuyongtao : Мои извинения. Это не работает в том смысле, что, когда я нажимаю на объект, я хочу получить значения HSV, выбранное изображение (как показано в сегментированном) равно нулю. Также выражение printf в функции printHSVValues (не показано здесь) показывает ненулевое значение HSV при первом нажатии на него, но при последующих щелчках оно равно нулю. – user3259040