OpenCV:将一个图像复制到另一个图像时出错

ann*_*arp 1 c++ opencv runtime-error pixel computer-vision

我试图将一个图像复制到另一个像素(我知道有复杂的方法可用.我正在尝试解决另一个问题并回答这将是有用的).

这是我的代码:

int main()
{
    Mat Img;
    Img = imread("../../../stereo_images/left01.jpg");

    Mat copyImg = Mat::zeros(Img.size(), CV_8U);
    for(int i=0; i<Img.rows; i++){
        for(int j=0; j<Img.cols; j++){
            copyImg.at<uchar>(j,i) = Img.at<uchar>(j,i);
        }}
    namedWindow("Image", CV_WINDOW_AUTOSIZE );
    imshow("Image", Img);
    namedWindow("copyImage", CV_WINDOW_AUTOSIZE );
    imshow("copyImage", copyImg);
    waitKey(0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在visual studio中运行此代码时,我收到以下错误

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file c:\opencv\opencv-2.4.9\ope
ncv\build\include\opencv2\core\mat.hpp, line 537
Run Code Online (Sandbox Code Playgroud)

我知道Img的类型是CV_8U.为什么会这样?

谢谢!

ber*_*rak 5

// will read in a rgb image , no matter what the content is
Img = imread("../../../stereo_images/left01.jpg"); 
Run Code Online (Sandbox Code Playgroud)

使其读取灰度图像使用:

Img = imread("../../../stereo_images/left01.jpg", CV_LOAD_IMAGE_GRAYSCALE); 
Run Code Online (Sandbox Code Playgroud)

那么,你不需要复制每个像素(你甚至应该避免这种情况),只需使用:

Mat im2 = Img.clone();
Run Code Online (Sandbox Code Playgroud)

如果你做每像素循环,请注意使索引正确.它是这里的row-col世界,而不是x,y,所以它应该是:

 copyImg.at<uchar>(i,j) = Img.at<uchar>(i,j);
Run Code Online (Sandbox Code Playgroud)

在你的情况下