


我目前正在做一些计算机视觉使用openCv。我有瓶的样品和标签。我试图确定什么时候瓶子上没有标签。标签的形状是矩形的。
我用done做了一个边缘检测,我试着用findcountour()来检测一个瓶子是否有一个内部轮廓(这将代表矩形标签)。
发布于 2013-11-12 16:39:04
如果您的问题是这样简单,只需放置减少您的图像使用矩形。
cv::Mat image = imread("image.png");
cv::Rect labelRegion(50, 200, 50, 50);
cv::Mat labelImage = image(labelRegion);然后将你的图像区域分解成三个通道。
cv::Mat channels[3];
cv::split(labelImage, channels);
cv::Mat labelImageRed = channels[2];
cv::Mat labelImageGreen = channels[1];
cv::Mat labelImageBlue = channels[0];然后,阈值,这每一个通道图像和计数数的零/非零像素。
I'm not providing code for this part!如果图像上没有标签,那么每个通道的值都大于200(您应该检查这个)。如果有一个标签,那么你会看到不同的结果,当计数零/非零像素从非标签之一。
发布于 2013-11-12 17:06:19
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat img=imread("c:/data/bottles/1.png");
Mat gray;
cvtColor(img,gray,CV_BGR2GRAY);
resize(gray,gray,Size(50,100));
Sobel(gray,gray,CV_16SC1,0,1);
convertScaleAbs(gray,gray);
if(sum(gray)[0]<130000)
{
cout<<"no label";
}else{
cout<<"has label";
}
imshow("gray",gray);
waitKey();
return 0;
}发布于 2013-11-12 15:48:42
我猜只要看看瓶子上有没有文字就够了(如果有,那就有标签了,反之亦然)。你可以查看一个像这这样的项目。在这一领域有许多论文;一些比较著名的论文是由斯坦福大学的简历小组- 1和2完成的。
HTH
https://stackoverflow.com/questions/19931956
复制相似问题