Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
opencv内存位置出现异常 我是新的OpenCV C++开发人员。我应用了SLIC超级像素,所以我有Mat:标签包含每个像素的ID,我在图像上应用了分割以获得绿色通道,然后我希望更改ID=150的特定像素的值(每个像素=!150必须转换为黑色像素)。调试后,我得到了以下错误:_C++_Visual Studio_Opencv - Fatal编程技术网

opencv内存位置出现异常 我是新的OpenCV C++开发人员。我应用了SLIC超级像素,所以我有Mat:标签包含每个像素的ID,我在图像上应用了分割以获得绿色通道,然后我希望更改ID=150的特定像素的值(每个像素=!150必须转换为黑色像素)。调试后,我得到了以下错误:

opencv内存位置出现异常 我是新的OpenCV C++开发人员。我应用了SLIC超级像素,所以我有Mat:标签包含每个像素的ID,我在图像上应用了分割以获得绿色通道,然后我希望更改ID=150的特定像素的值(每个像素=!150必须转换为黑色像素)。调试后,我得到了以下错误:,c++,visual-studio,opencv,C++,Visual Studio,Opencv,异常在0x000 07FFB63A0A38中抛出:微软C++异常:CV::内存位置异常,0x000,14966AFE290。 在0x000 07FFB63A0A38中未处理的异常:微软C++异常:CV::内存位置异常,0x000,1496AFE290.< 这是我的密码 int main() { Mat labels; Mat RGB[3], HSV[3],S_HSV,image3; vector<double> STD, generale_mean;

异常在0x000 07FFB63A0A38中抛出:微软C++异常:CV::内存位置异常,0x000,14966AFE290。 在0x000 07FFB63A0A38中未处理的异常:微软C++异常:CV::内存位置异常,0x000,1496AFE290.< 这是我的密码

   int main()
{

    Mat labels;
    Mat RGB[3], HSV[3],S_HSV,image3;
    vector<double> STD, generale_mean;
    Mat image, Red, Green, Blue, image2,mask,Gray;
    int region_number;
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;

    image = imread("D:\\mémoire\\eye.png", CV_LOAD_IMAGE_COLOR);

    //applying the superpixel 

    Ptr<cv::ximgproc::SuperpixelSLIC> slic = cv::ximgproc::createSuperpixelSLIC(image, 100,50, 0.01);
    slic->iterate(10);
    if (true)
        slic->enforceLabelConnectivity(50);

    slic->getLabelContourMask(mask, true);
    image.setTo((0, 0, 255), mask);
    slic->getLabels(labels);
    region_number = slic->getNumberOfSuperpixels();

    cv::cvtColor(image, image, CV_BGR2RGB);

    cv::cvtColor(image, Gray,CV_RGB2GRAY);

    split(image, RGB);

    Red.push_back(RGB[0]);
    Green.push_back(RGB[1]);
    Blue.push_back(RGB[2]);

        int f = 150;
        Mat Green1 = Green.clone();
        int Y =0;

        for (int j = 0; j < Green1.rows; j++) {
            for (int i = 0; i < Green1.cols; i++) {

                double N = labels.at<double>(Point(i, j));
                if (N =! f) 

                    Green1.at<double>(Point(i, j)) = 00000;

            }
        }

        cv::imshow("green", Green1);        

    waitKey(0);         // Wait for a keystroke in the window
    return 0;
}
intmain()
{
垫子标签;
Mat RGB[3],HSV[3],SHSV,图像3;
向量标准,一般平均值;
Mat图像,红色,绿色,蓝色,图像2,遮罩,灰色;
int区域_数;
矢量等值线;
向量层次;
image=imread(“D:\\mémoire\\eye.png”,CV\u LOAD\u image\u COLOR);
//应用超像素
Ptr slic=cv::ximgproc::createSuperpixelSLIC(图,100,50,0.01);
slic->迭代(10);
如果(真)
slic->enforceLabelConnectivity(50);
slic->getLabelContourMask(mask,true);
设置为((0,0,255),掩码);
slic->getLabels(标签);
region_number=slic->getNumberOfSuperpixels();
cv::CVT颜色(图像,图像,cv_BGR2RGB);
cv::CVT颜色(图像、灰色、cv_rgb2灰色);
分割(图像,RGB);
红色。推回(RGB[0]);
绿色。推回(RGB[1]);
蓝色。推回(RGB[2]);
int f=150;
Mat Green1=Green.clone();
int Y=0;
对于(int j=0;j
图像类型有问题。在OpenCV中加载图像时,请使用:

image = imread(filename, CV_LOAD_IMAGE_COLOR);
它将是CV8UC3类型的图像。这意味着,它将有3个通道(C3部分),每个通道的每个像素值都是8位的无符号int类型。在C++中,你可以使用uChar来实现它。然后,当您使用at函数时,您需要使用能够正确保存信息的类型。。。这就是乌查尔的情况。在您的代码中,您有:

Green1.at<double>(Point(i, j)) = 00000;

您在以下方面也有问题:

double N = labels.at<double>(Point(i, j));

给出了一个类型CVY32 SC1- >,即1通道和32位有符号整数,或者C++,int</P> 那么这应该是:

int N = labels.at<int>(j,i);
应该是:

Green1.at<uchar>(j,i) = 0;
Red = RGB[0];
Green = RGB[1];
Blue = RGB[2];

你调试过这个吗?这还不足以让我们为你提供更多的帮助。我将更新我的帖子,并将所有的代码放入其中。引发的异常是什么?错误消息基本上只是说OpenCV抛出了一个异常,但它没有显示OpenCV异常的详细信息。例如,调用堆栈将非常有用。我如何显示异常?!错误在这一行
Green1.at(点(i,j))=00000
first是一个uchar而不是一个double,你可以不用像这样的点
Green1.at(j,i)=0请注意,与接收x、y的点相比,at接收行、列
int N = labels.at<int>(j,i);
Red.push_back(RGB[0]);
Green.push_back(RGB[1]);
Blue.push_back(RGB[2]);
Red = RGB[0];
Green = RGB[1];
Blue = RGB[2];