2 csdnyiqixuexiba csdnyiqixuexiba 于 2016.01.18 20:57 提问

opencv连续读取多张图片,并对每张图片进行霍夫圆操作后,只能读取第一张图片

当单独对第一个for循环进行操作时,会显示文件下的4张图片,但是加上霍夫变换后,只能显示一张图片及霍夫变换后的图片,其他的3张图片及变换后的图片都显示不出来,请问这是为什么?
#include "cv.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/opencv.hpp"
#include
char filename[100];
char windowname[100];

using namespace cv;
using namespace std;

/** @function main /
int main()
{
for (int j = 1; j <= 4; j++)
{
sprintf(filename, "E:/projects/%d.jpg", j);
sprintf(windowname, "window%d.jpg", j);
IplImage
pScr = cvLoadImage(filename, 1);
cvNamedWindow(windowname, CV_WINDOW_AUTOSIZE);
cvShowImage(windowname, pScr);
/// Read the image

    Mat src=pScr;//将IplImage类型的图片pScr转换为Mat型的src,因为霍夫变换是对Mat类型进行操作的,不知道这里理解对不对
    Mat  src_gray;
    if (!src.data)
    {
    return -1;
    }

    /// Convert it to gray
    cvtColor(src, src_gray, CV_BGR2GRAY);

    /// Reduce the noise so we avoid false circle detection
    GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2);

    vector<Vec3f> circles;

    /// Apply the Hough Transform to find the circles
    HoughCircles(src_gray, circles, CV_HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);

    /// Draw the circles detected
    for (size_t i = 0; i < circles.size(); i++)
    {
    Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
    int radius = cvRound(circles[i][2]);
    // circle center
    circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);
    // circle outline
    circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);
    cout << "第" << j << "个图片的直径是:" << 2 * radius << endl;
    }

    /// Show your results
    namedWindow("Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE);
    imshow("Hough Circle Transform Demo", src);
    waitKey(0);

}
    waitKey(0);
    return 0;

}

2个回答

91program
91program   Ds   Rxr 2016.01.18 21:04

加上霍夫变换后出现的问题,说明你的霍夫变换部分的代码有问题。
可能存在内存访问越界的情况,建议你调试一下代码、分析一下执行过程中是不是出现异常的情况。

csdnyiqixuexiba
csdnyiqixuexiba 可是霍夫变换单独运行的时候也是正确的,我看有人说那个imshow();是只能显示一次,不能根据for循环而循环显示,不知道是不是这个原因呢
2 年多之前 回复
wangyaninglm
wangyaninglm   Ds   Rxr 2016.01.19 15:16

waitKey(0);外面找个不知道去掉影响不,
完后就是每次用完mat 用api把mat里面内容清空一下?

csdnyiqixuexiba
csdnyiqixuexiba 回复csdnyiqixuexiba: 程序还是这,没有变化
2 年多之前 回复
csdnyiqixuexiba
csdnyiqixuexiba 刚才试了一下,把外面那个waitKey(0);去掉之后没有影响,现在有个问题,就是每次运行之后会出来第一张图片的原图和霍夫变换之后的图,然后我将这两个图的窗口关闭之后会自动出现第二张图的原图和它的霍夫变换图,然后在分别关掉后,会顺序出现接下来的每张图和变换图,为什么不能一次全部出来呢,而是先把当前的关掉之后才会出来后面的呢?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
OpenCV读取连续多张图片
在OpenCV中,有时候可能需要处理多张图片,花了一些时间,查找资料,写了下面这样一段程序,可以读取连续的图片(比如1到99)这样; 代码如下: #include #include #include #include #include #include "stdafx.h" using namespace std; using namespace cv; int _tmain(in
毕设之Opencv批量霍夫圆检测
毕设之Opencv批量霍夫圆检测 程序思路:编写read_csv()函数读取图片目录下txt文档,获取各BMP文件绝对路径以及对应圆的圆心坐标、半径参数。读取各BMP图像,转为灰度图,进行图像平滑,最后霍夫圆检测;并将检测结果和实际结果存入txt文档。 本程序高斯平滑和霍夫圆变换都需要调参。 功能小结: 1、read_csv()函数 void read_csv(string& csvP
opencv中批量读取图片并保存
在生成训练集的时通常需要对文件夹中图片进行批处理,本文简要介绍图像批量读取、处理、保存的方法。 1.首先生成图片描述文件
【Python_Demo_2】使用Python连续(批量)读取图片数据的Demo
#coding = utf-8 #===================================================================================================== #文件说明: # 使用Python批量的读入图片数据 #开发环境: # IDLE+PYTHON2.7+UBUNTU14.04+CAFFE
opencv连续读取文件夹下的图片(python)
网上有许多顺序读取图片的程序,但python下的很少,需要用到其他模块的函数,今天介绍一个最简单的: cv2.imread() 使用方法: for i in range(20)      #循环次数 image=cv2.imread("D:\\picture\\%d.jpg"%(i))#路径自己选择
C++中用for循环中对多幅图像进行同样的处理
问题描述: 有n幅图,命名分别为Image1.tif,Image2.tif ... ... Imagen.tif 现在要在一个for循环中对每幅图像进行同样的处理,如灰度化,二值化等,需要用到函数如下: CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)
利用opencv读取多张图片
利用opencv中的imread读取图片十分方便,这里读取多张图片利用for循环的方法进行读取 代码如下 #include #include #include #include using namespace std; using namespace cv; int main() { system("color 5F");//自己设置的显示背景和数字的颜色
MATLAB用循环实现多幅图像处理
采用matlab编程,可实现一次对多幅图像进行灰度化,其他处理同理,改一下处理处的代码即可
opencv从文件中批量读取图像
用opencv处理图像,特别涉及到机器学习算法训练模型时,需要批量地读取图像。方法1:比较简单,唯一的要求就是文件夹下的图片名称是有规律的,如 ***(0)、***(1)、***(2)、***(3)·····#include &quot;opencv2/opencv.hpp&quot; #include &quot;iostream&quot; using namespace std; using namespace cv; #de...
opencv 读取一个文件夹下的多张图片并处理保存
笔者的编译环境 vs2013+opencv2.4.9 注意:多个图片显示要用多个窗口,要不然会发生未知错误。 #include "stdafx.h" #include "cv.h" #include "highgui.h" char filename[100]; //定义一个全局数组型变量,存放图片名字 char windowname[100]; //定义一个全局数组型变量