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.为什么会这样?
谢谢!
// 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)
在你的情况下
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |