Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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++ 在“for”循环中调试if条件语句时,断言失败_C++_Opencv - Fatal编程技术网

C++ 在“for”循环中调试if条件语句时,断言失败

C++ 在“for”循环中调试if条件语句时,断言失败,c++,opencv,C++,Opencv,我想将0像素值与掩码图像中具有0像素值的像素位置等同于灰度img12图像中的相同位置,这是一个灰度图像。当我将for循环放入try-catch块时,它给了我错误,断言失败,如果不使用try-catch,错误是0x755b0f22处的未处理异常和内存位置0x004af338处的cv::Exception。。我正在使用opencv 3.0.0测试版和Visual Studio 2010 #include <opencv2/imgproc/imgproc.hpp> #include <

我想将0像素值与掩码图像中具有0像素值的像素位置等同于灰度img12图像中的相同位置,这是一个灰度图像。当我将for循环放入try-catch块时,它给了我错误,断言失败,如果不使用try-catch,错误是0x755b0f22处的未处理异常和内存位置0x004af338处的cv::Exception。。我正在使用opencv 3.0.0测试版和Visual Studio 2010

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/calib3d.hpp>

#include <iostream>
#include <sstream>
using namespace cv;
using namespace std;

int main()
{

// Reading Mask and Creating New Image 
    Mat grayimg, grayimg12, input, Mask; int keyboard; 
    input = imread("peter.jpg");
    cvtColor(input, grayimg, COLOR_BGR2GRAY);
    grayimg.copyTo(grayimg12, grayimg);

    namedWindow("Gray Converted Frame");
    imshow("Gray Converted Frame", grayimg);
    int r = input.rows; int c = input.cols; 

    Mask = grayimg > 100;

    namedWindow("Binary Image");
    imshow("Binary Image", Mask);

    try
    {
    for (int i=1;i<=r;i++)
    {
        for (int j=1;j<=c; j++)
        {
            if (Mask.at<uchar>(i,j) == 0)
            {
                grayimg12.at<uchar>(i,j) = 0;

            }
            else
                grayimg12.at<uchar>(i,j) = grayimg.at<uchar>(i,j);

        }
    }
    }
    catch(Exception)
    {
        cout<<"Hi..";
    }

    namedWindow("Gray Output Image");
    imshow("Gray Output Image", grayimg12);

    keyboard = waitKey( 10000 ); 
    return 0;
}

您的循环索引被关闭了1,因此当您尝试访问超出映像边界的内存时,会出现异常。更改:

for (int i=1;i<=r;i++)
{
    for (int j=1;j<=c; j++)
    {
致:


<>注意,在C、C++和相关语言中,数组是零的。因此,大小为N的数组的有效索引范围是从0到N-1(包括0到N-1)。

c++不是matlab。必须从0迭代到第1行。此外,请尽可能避免写入每像素循环。您可以简单地使用grayImg.copyTograyImg12,mask;谢谢对于图像,它工作得很好,但对于视频,它产生了问题,我不知道为什么,因为它必须类似地工作。
for (int i=0;i<r;i++)         // for i = 0 to r-1
{
    for (int j=0;j<c; j++)    // for j = 0 to c-1
    {