首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测瓶子是否有标签

检测瓶子是否有标签
EN

Stack Overflow用户
提问于 2013-11-12 14:33:17
回答 3查看 2.7K关注 0票数 2

我目前正在做一些计算机视觉使用openCv。我有瓶的样品和标签。我试图确定什么时候瓶子上没有标签。标签的形状是矩形的。

我用done做了一个边缘检测,我试着用findcountour()来检测一个瓶子是否有一个内部轮廓(这将代表矩形标签)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-12 16:39:04

如果您的问题是这样简单,只需放置减少您的图像使用矩形。

代码语言:javascript
复制
cv::Mat image = imread("image.png");
cv::Rect labelRegion(50, 200, 50, 50);
cv::Mat labelImage = image(labelRegion);

然后将你的图像区域分解成三个通道。

代码语言:javascript
复制
cv::Mat channels[3];
cv::split(labelImage, channels);

cv::Mat labelImageRed = channels[2];
cv::Mat labelImageGreen = channels[1];
cv::Mat labelImageBlue = channels[0];

然后,阈值,这每一个通道图像和计数数的零/非零像素。

代码语言:javascript
复制
I'm not providing code for this part!

如果图像上没有标签,那么每个通道的值都大于200(您应该检查这个)。如果有一个标签,那么你会看到不同的结果,当计数零/非零像素从非标签之一。

票数 5
EN

Stack Overflow用户

发布于 2013-11-12 17:06:19

代码语言:javascript
复制
#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;
}
票数 2
EN

Stack Overflow用户

发布于 2013-11-12 15:48:42

我猜只要看看瓶子上有没有文字就够了(如果有,那就有标签了,反之亦然)。你可以查看一个像这样的项目。在这一领域有许多论文;一些比较著名的论文是由斯坦福大学的简历小组- 12完成的。

HTH

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19931956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档