0

我有一张灰色图像,我想从图像中读取每一行。

我该怎么做这个算法?

谁能帮我

有我使用的代码

 //#include "stdafx.h"
#include <stdio.h>
#include <cv.h>
#include <iostream>
#include <conio.h>
#include <cxcore.h>
#include  <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <stdlib.h>
using namespace cv;


Mat dst;       
void main()
{

cv::Mat img = cv::imread("capture.jpg",CV_LOAD_IMAGE_GRAYSCALE);

cv::Mat some_row = img.row(0); //gives 1st row


namedWindow( "source",CV_NORMAL);
 imshow( "source",img);
 namedWindow( "img",CV_NORMAL);
 imshow( "img",dst);
 waitKey(0);

从图像中我喜欢对颜色进行排序并进行测试,如果我能找到顺序白色然后黑色结束然后白色然后黑色。出于这个原因,我喜欢逐行进行搜索。我可以分享你可以更了解我的图片。我已经制定了一种算法,可以从右侧和左侧检测圆圈并且有效。我需要一个仅搜索图像中的颜色而不搜索对象的代码(按顺序排列的颜色(White.Black.White.Black)获得我正在搜索的正确位置)我们在图像中显示。https://drive.google.com/file/d/0B1WQBCaQu10geG1uTm40ZG9IVjQ/edit?usp=sharing

4

2 回答 2

1

您可以使用.row()方法:

cv::Mat img = cv::imread("some_path.jpg",CV_LOAD_IMAGE_GRAYSCALE);//some gray level image  

cv::Mat some_row = img.row(0); //gives 1st row

请注意,此方法会导致与原始矩阵共享数据img。如果要进行复制操作,可以使用.copyTo()方法。

于 2013-11-07T11:46:20.497 回答
1

我建议你阅读关于扫描图像的 opencv 教程。您还应该查看Mat 类的文档

有不止一种方法可以满足您的需要。不同的方法具有不同的效率和安全性权衡。更有效的方法直接使用指针。这很快,但您必须注意根据图像可能存储在内存中的像素、通道和填充的数量来正确地进行指针运算。

另一方面,使用迭代器甚至类似的东西Mat::at更安全,因为这些计算是为您完成的。但效率不高。

查看文档并选择适合您问题的内容。希望有帮助。

于 2013-11-07T11:37:18.973 回答