Objective c 使用opencv或其他技术识别图像四个角上出现的黑色图案
我遇到了一个问题,那就是如何识别图像中的一些模式 图像是纯白色的纸张图像,四个角的图案为黑色。 我想识别图像上的黑色图案 我在网上冲浪了很多次,发现opencv就是一个答案。但是没有提供任何描述如何使用opencv来实现所需功能的内容 请帮助我了解一些编码观点,或者提供一些我应该遵循的链接,或者我应该使用的任何开源库的名称来实现此功能。 图案的图像如下所示:- 图像由纯白色背景和四个角落的黑色图案组成。我需要识别所有四个角落的这些黑色图案,然后处理图像。一个角落显示为椭圆形以突出显示 如有任何建议,将不胜感激 提前谢谢 也许这对你有帮助,尤其是到的链接似乎正是你想要的 关于如何在iOS上使用OpenCV,您可能想看看,并且。也许这对您有帮助,尤其是指向的链接似乎正是您想要的Objective c 使用opencv或其他技术识别图像四个角上出现的黑色图案,objective-c,ios,image-processing,pattern-matching,image-recognition,Objective C,Ios,Image Processing,Pattern Matching,Image Recognition,我遇到了一个问题,那就是如何识别图像中的一些模式 图像是纯白色的纸张图像,四个角的图案为黑色。 我想识别图像上的黑色图案 我在网上冲浪了很多次,发现opencv就是一个答案。但是没有提供任何描述如何使用opencv来实现所需功能的内容 请帮助我了解一些编码观点,或者提供一些我应该遵循的链接,或者我应该使用的任何开源库的名称来实现此功能。 图案的图像如下所示:- 图像由纯白色背景和四个角落的黑色图案组成。我需要识别所有四个角落的这些黑色图案,然后处理图像。一个角落显示为椭圆形以突出显示 如有任何
关于如何在iOS上使用OpenCV,您可能想看一看并了解。我真的不理解您的问题-如果您说: 图像是纯白色的纸张图像和图案 在四个角落里都是黑色的 那么,从图像中仅遮罩这四个轮廓有什么问题?在使用4个长度为40像素的正方形进行遮罩后,我得到了以下结果: 要删除小区域,可以使用形态学操作。我明白了: 只需在输入图像上绘制它们(可选)。结果如下: 为了实现这个算法,我使用OpenCV库。我100%确信它最终能在IOS-OpenCV团队上运行。如果你说:
我试着运行OpenCV iOS链接,但项目没有运行,它失败了 正在显示错误 那我们就帮不了你,因为我们不是心灵感应者,看不到你的问题。只是一个小小的建议——试着用谷歌搜索你的问题。我99%确信这会有所帮助 <> >以免忘记——这里是C++代码:
Mat src = imread("input.png"), tmp;
//convert image to 1bit
cvtColor(src, tmp, CV_BGR2GRAY);
threshold(tmp, tmp, 200, 255, THRESH_OTSU);
//do masking
#define DELTA 40
for (size_t i=0; i<tmp.rows; i++)
{
for (size_t j=0; j<tmp.cols; j++)
{
if(!((i < DELTA && j < DELTA)
|| (i < DELTA && j > tmp.cols - DELTA)
|| (i > tmp.rows - DELTA && j < DELTA)
|| (i > tmp.rows - DELTA && j > tmp.cols - DELTA)))
{
//set color to black
tmp.at<uchar>(i, j) = 255;
}
}
}
bitwise_not(tmp,tmp);
//erosion and dilatation:
Mat element = getStructuringElement(MORPH_RECT, Size(2, 2), Point(1, 1));
erode(tmp, tmp, element);
dilate(tmp, tmp, element);
//(Optional) find contours and draw them:
vector<Vec4i> hierarchy;
vector<vector<Point2i> > contours;
findContours(tmp, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (size_t i=0; i<contours.size(); i++)
{
drawContours(src, contours, i, Scalar(0, 0, 255), 1);
}
matsrc=imread(“input.png”),tmp;
//将图像转换为1bit
CVT颜色(src、tmp、CV_bgr2灰色);
阈值(tmp、tmp、200、255、THRESH_OTSU);
//做掩蔽
#定义DELTA 40
对于(大小i=0;i tmp.rows-增量和&jtmp.rows-DELTA和&j>tmp.cols-DELTA)))
{
//将颜色设置为黑色
tmp.at(i,j)=255;
}
}
}
按位_not(tmp,tmp);
//侵蚀和膨胀:
Mat元素=getStructuringElement(变形、大小(2,2)、点(1,1));
侵蚀(tmp、tmp、元素);
扩张(tmp,tmp,元素);
//(可选)查找轮廓并绘制它们:
向量层次;
矢量等值线;
findContours(tmp、轮廓、层次结构、CV_RETR_外部、CV_链_近似_简单);
对于(size_t i=0;i我真的不理解你的问题-如果你说:
图像是纯白色的纸张图像和图案
在四个角落里都是黑色的
那么,从图像中仅遮罩这四个轮廓有什么问题?在使用4个长度为40像素的正方形进行遮罩后,我得到了以下结果:
要删除小区域,可以使用形态学操作。我得到了以下结果:
只需在输入图像上绘制它们(可选)。结果如下:
为了实现这个算法,我使用OpenCV库。我100%确信它最终能在IOS-OpenCV团队上运行。所以如果你说:
我试着运行OpenCV iOS链接,但项目没有运行,它失败了
正在显示错误
那我们就不能帮你了,因为我们不是心灵感应者,不会看到你的问题。只是一个小小的建议——试着用谷歌搜索你的问题。我99%肯定这会有帮助
<> >以免忘记——这里是C++代码:
Mat src = imread("input.png"), tmp;
//convert image to 1bit
cvtColor(src, tmp, CV_BGR2GRAY);
threshold(tmp, tmp, 200, 255, THRESH_OTSU);
//do masking
#define DELTA 40
for (size_t i=0; i<tmp.rows; i++)
{
for (size_t j=0; j<tmp.cols; j++)
{
if(!((i < DELTA && j < DELTA)
|| (i < DELTA && j > tmp.cols - DELTA)
|| (i > tmp.rows - DELTA && j < DELTA)
|| (i > tmp.rows - DELTA && j > tmp.cols - DELTA)))
{
//set color to black
tmp.at<uchar>(i, j) = 255;
}
}
}
bitwise_not(tmp,tmp);
//erosion and dilatation:
Mat element = getStructuringElement(MORPH_RECT, Size(2, 2), Point(1, 1));
erode(tmp, tmp, element);
dilate(tmp, tmp, element);
//(Optional) find contours and draw them:
vector<Vec4i> hierarchy;
vector<vector<Point2i> > contours;
findContours(tmp, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (size_t i=0; i<contours.size(); i++)
{
drawContours(src, contours, i, Scalar(0, 0, 255), 1);
}
matsrc=imread(“input.png”),tmp;
//将图像转换为1bit
CVT颜色(src、tmp、CV_bgr2灰色);
阈值(tmp、tmp、200、255、THRESH_OTSU);
//做掩蔽
#定义DELTA 40
对于(大小i=0;i tmp.rows-增量和&jtmp.rows-DELTA和&j>tmp.cols-DELTA)))
{
//将颜色设置为黑色
tmp.at(i,j)=255;
}
}
}
按位_not(tmp,tmp);
//侵蚀和膨胀:
Mat元素=getStructuringElement(变形、大小(2,2)、点(1,1));
侵蚀(tmp、tmp、元素);
扩张(tmp,tmp,元素);
//(可选)查找轮廓并绘制它们:
向量层次;
矢量等值线;
findContours(tmp、轮廓、层次结构、CV_RETR_外部、CV_链_近似_简单);
对于(size_t i=0;iI尝试运行OpenCV iOS链接,但项目未运行,它显示错误。我尝试运行OpenCV iOS链接,但项目未运行,它显示错误。感谢您的回答,我正在编写此答案,以将代码转换为Objective c并使用它,我需要请您解释两行:-Mat src=imread(“input.png”),tmp;这行是什么意思?这里的tmp是什么?将图像转换为1它意味着将图像转换为灰度或其他东西。请回答,以便我可以继续我的工作。嘿,我的问题是,我想检测张贴的图像中显示的四个角是否存在于从相机拍摄的图像上,如果存在,则我会我只想得到四个角落里的那一部分。我不明白如何从你发布的答案中实现这一点。@Gypsa你不需要转换它。OpenCV已经发布了IOS版-只需使用它!正如我在发帖前的谷歌问题中所提到的-这里是和这里是。Tmp
意味着临时矩阵。如果你我成功地用放大法画出了轮廓,但我想问的是,从这一点上,我怎么能识别出四个角是不是