我怎么能逐行读取greyimage行opencv c ++

时间:2013-11-07 11:11:19

标签: c++ opencv

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

我该怎么做这个算法?

任何人都可以帮助我

有使用

的代码
 //#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

2 个答案:

答案 0 :(得分:1)

我建议您阅读scanning images上的opencv教程。您还应该查看documentation for the Mat class

有多种方法可以满足您的需求。不同的方法有不同的效率和安全权衡。更有效的方法直接使用指针。这很快,但您必须根据图像可能存储在内存中的像素数,通道数和填充数来正确处理指针算术。

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

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

答案 1 :(得分: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()方法。