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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!