Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用opencv生长的种子区_C++_Image Processing_Opencv - Fatal编程技术网

C++ 用opencv生长的种子区

C++ 用opencv生长的种子区,c++,image-processing,opencv,C++,Image Processing,Opencv,我需要选择一个像素值,并根据种子像素应用区域增长。在尝试编写代码之后,结果总是一个黑色图像 不管我用什么种子点。整个问题涉及GrowColor函数。我的猜测是ifs的逻辑错误 #include <cv.h> #include <highgui.h> using namespace std; int xDim, yDim, zDim; float ThreshHold = 45.0; unsigned long total[3]; int coont, tt; IplI

我需要选择一个像素值,并根据种子像素应用区域增长。在尝试编写代码之后,结果总是一个黑色图像 不管我用什么种子点。整个问题涉及
GrowColor
函数。我的猜测是ifs的逻辑错误

#include <cv.h>
#include <highgui.h>

using namespace std;

int xDim, yDim, zDim;
float ThreshHold = 45.0;
unsigned long total[3];
int coont, tt;
IplImage *Image1;
IplImage *Image2;

CvScalar s = cvScalar(0, 0, 0, 0);
CvScalar s11 = cvScalar(0, 0, 0, 0);

int Diff, mean[3], temp[3];

void GrowColor(int x, int y);

int main(int argc, char *argv[]) {

    char value[4];

    int pixType, dimCut;
    int Dbug = false;
    int Xseed = 40, Yseed = 234;
    int i = 0, x, y;
    Image1 = cvLoadImage("lenah.jpg");
    yDim = Image1->height;
    xDim = Image1->width;
    // int step= Image1->widthStep;
    //uchar* data = (uchar *)Image1->imageData;

//New image
    Image2 = cvCreateImage(cvSize(Image1->width, Image1->height), IPL_DEPTH_8U,
            1);
    cvZero(Image2);
    total[0] = total[1] = total[2] = coont = 0;

//Process

    for (y = Yseed - 5; y <= Yseed + 5; y++)
        for (x = Xseed - 5; x <= Xseed + 5; x++)
            if ((x > 0) && (y > 0) && (x < xDim) && (y < yDim)) {

                coont++;
                s = cvGet2D(Image1, x, y);
                total[0] += abs(s.val[0]);
                total[1] += abs(s.val[1]);
                total[2] += abs(s.val[2]);

            }

    GrowColor(Xseed, Yseed);
    cvNamedWindow("wndname", 1);
    cvShowImage("original", Image1);

    cvShowImage("wndname", Image2);
    cvWaitKey(0);
    return 0;

}

void GrowColor(int x, int y) {
//Check to see if point already part of region

    s.val[0] = 0;
    s.val[1] = 0;
    s.val[2] = 0;
    s.val[3] = 0;
    if ((x < 1) && (y < 1))
        s = cvGet2D(Image2, x, y);

    if (s.val[0] == 0) {
        int k;
        if ((x == 1) && (y == 1))
            s11 = cvGet2D(Image1, x, y);
        mean[0] = total[0] / coont;
        mean[1] = total[1] / coont;
        mean[2] = total[2] / coont;

        temp[0] = abs(s11.val[0]) - mean[0];
        temp[1] = abs(s11.val[1]) - mean[1];
        temp[2] = abs(s11.val[2]) - mean[2];

        Diff =
                (int) (sqrt(
                        (temp[0] * temp[0] + temp[1] * temp[1]
                                + temp[2] * temp[2]) / 3));

        if (Diff < ThreshHold) {

            total[0] += abs(s11.val[0]);
            total[1] += abs(s11.val[1]);
            total[2] += abs(s11.val[2]);
            coont++;
            s.val[0] = 120;
            if ((x > 0) && (y > 0))
                cvSet2D(Image2, x, y, s);
            if (x > 2)
                GrowColor(x - 1, y);
            if (y > 2)
                GrowColor(x, y - 1);
            if (x < xDim - 2)
                GrowColor(x + 1, y);
            if (y < yDim - 2)
                GrowColor(x, y + 1);

        }

    }

}
#包括
#包括
使用名称空间std;
int-xDim、yDim、zDim;
浮动阈值=45.0;
无符号长总计[3];
int coont,tt;
IplImage*Image1;
IplImage*Image2;
CvScalar=CvScalar(0,0,0,0);
CvScalar s11=CvScalar(0,0,0,0);
内部差异,平均值[3],温度[3];
颜色(整数x,整数y);
int main(int argc,char*argv[]){
字符值[4];
int pixType,dimCut;
int Dbug=false;
int-Xseed=40,Yseed=234;
int i=0,x,y;
Image1=cvLoadImage(“lenah.jpg”);
yDim=Image1->高度;
xDim=Image1->宽度;
//int step=Image1->widthStep;
//uchar*数据=(uchar*)图像1->图像数据;
//新形象
Image2=cvCreateImage(cvSize(Image1->宽度,Image1->高度),IPL_深度_8U,
1);
cvZero(图2);
总计[0]=总计[1]=总计[2]=coont=0;
//过程
对于(y=Yseed-5;y0)和&(x0)和&(y>0))
cvSet2D(图像2,x,y,s);
如果(x>2)
GrowColor(x-1,y);
如果(y>2)
GrowColor(x,y-1);
if(x
生成
GrowColor
递归函数可能会导致无限循环。检查该函数中的代码一次。

很好。插入几个断点来查看代码的进度可能是值得的。