我想识别图1 highlighted shape(绿色边框)中显示的形状/标记
扫描的对象类似于桥。 不幸的是,我不知道如何检测特定形状。
图片2显示了原始RGB图片。 2.Original Image
我用边缘检测“ cv :: Canny”和轮廓“ cv :: findContours”(3.Edge detection results)对其进行编辑。
从现在开始,我不知道该怎么办。
我在c ++中使用opencv 3.4.2和libfreenect2。 我使用kinect v2进行录音。
代码部分调用图像(3.),并使用“ findContours”对其进行编辑。但是,仅显示外部矩形。但是我想显示整个表格,如图(1)所示。不幸的是,我不知道该怎么做。
我会很高兴获得帮助。随时发送一些代码示例。 谢谢
vector< vector<Point> > contours;
vector<Vec4i> hierarchy;
src.copyTo( dst, detected_edges);
imshow( window_name, dst );
imwrite ("Canny.png", dst);
image=imread ("Canny.png");
Mat converted (image.rows, image.cols, CV_8UC1);
Mat dat (image.rows, image.cols, CV_8UC1, Scalar ::all(0));
cvtColor(image, converted, COLOR_BGR2GRAY,1);
dilate(converted, converted, Mat(), Point(-1.5,-1.5));
threshold (converted, converted,25, 255, THRESH_BINARY);
//findContours (converted, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE );
findContours (converted, contours,hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
// Mat drawing =Mat::zeros (converted.size(), CV_8UC3);
for (int i=0; i<contours.size(); i++)
{
double a= contourArea (contours[i], false);
if(a>largest_area)
{
largest_area=a;
largest_contour_index=i;
bounding_rect=boundingRect (contours[i]);
}
}
Scalar color (255,255,255);
drawContours (dat, contours, largest_contour_index, color, CV_FILLED,8,hierarchy);
rectangle (image, bounding_rect , Scalar (0,255,0),1,8,0);
imshow("dat", image);
imshow ("largestContour", dat);
imwrite("largestContour.png", image);
imwrite("dat.png", dat);