मैं कुछ त्वचा का पता लगा रहा हूं लेकिन एक चिकनी नहीं हो सकता। नीचे दी गई छवि में नीचे दिए गए कोड का उपयोग करके इनपुट (बाएं) और आउटपुट (दाएं) शामिल हैं। अब, वांछित आउटपुट सबसे अधिक छवि (जो किनारों पर चिकनी है और इसमें छेद नहीं है) होना चाहिए था। मैं इस आउटपुट को कैसे प्राप्त करूं? शुरू करने के लिए एक नमूना कोड बहुत मददगार होगा।ओपनसीवी त्वचा का पता लगाने
इनपुट (बाएं) और गलत उत्पादन (दाएं):
वांछित उत्पादन:
कोड incorect उत्पादन उत्पन्न करने के लिए:
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(){
Mat src = imread("qq.jpg");
if (src.empty())
return -1;
blur(src, src, Size(3,3));
Mat hsv;
cvtColor(src, hsv, CV_BGR2HSV);
Mat bw;
inRange(hsv, Scalar(0, 10, 60), Scalar(20, 150, 255), bw);
imshow("src", src);
imshow("dst", bw);
waitKey(0);
return 0;
}
संशोधित कोड (बाद में एस्टर के सुझाव): (समस्या अब है: आपके द्वारा उत्पादन में भी आसानी करते)
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int findBiggestContour(vector<vector<Point> >);
int main(){
Mat src = imread("qq.jpg");
if (src.empty())
return -1;
blur(src, src, Size(3,3));
Mat hsv;
cvtColor(src, hsv, CV_BGR2HSV);
Mat bw;
inRange(hsv, Scalar(0, 10, 60), Scalar(20, 150, 255), bw);
imshow("src", src);
imshow("dst", bw);
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(bw, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
int s = findBiggestContour(contours);
Mat drawing = Mat::zeros(src.size(), CV_8UC1);
drawContours(drawing, contours, s, Scalar(255), -1, 8, hierarchy, 0, Point());
imshow("drw", drawing);
waitKey(0);
return 0;
}
int findBiggestContour(vector<vector<Point> > contours){
int indexOfBiggestContour = -1;
int sizeOfBiggestContour = 0;
for (int i = 0; i < contours.size(); i++){
if(contours[i].size() > sizeOfBiggestContour){
sizeOfBiggestContour = contours[i].size();
indexOfBiggestContour = i;
}
}
return indexOfBiggestContour;
}
धन्यवाद! मुझे एक आउटपुट मिला जो वांछित आउटपुट के करीब है। क्या मैं पूछ सकता हूं कि मैं आउटपुट के किनारों को कैसे सुगम बना सकता हूं? –
चिकनाई या धुंधला उपयोग करने का प्रयास करें। ओपनसीवी में ये कार्य हैं। – ArtemStorozhuk
मैंने pyrMeanShiftFiltering() फ़ंक्शन का उपयोग इस तरह से चिकनी दिखने के लिए किया था। –