Ask Your Question
0

OpenCV(4.1.0) Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file c:\opencv\build\include\opencv2\core\mat.inl.hpp, line 1145

asked 2019-06-28 04:12:45 -0600

Yik gravatar image

updated 2019-06-28 07:07:55 -0600

LBerger gravatar image

I used this code in Visual Studio 2017 to convert the 16-bit grayscale image to 8-bit, but the following question appeared when I started executing the exe file. ##

#include<iostream>
#include <opencv2/opencv.hpp>
#include <string>
#include <stdio.h>
//#include "pch.h"
//#include <direct.h>
using namespace std;
using namespace cv;
int main(void) {
 char buff1[100];
 char buff2[100];
 for (int i = 1; i < 21; i++) {
    //sprintf_s(buff1, "E:\\Mask_RCNN-master\\My Images\\labelme_json\\%d_json\\label.png",i);
    //sprintf_s(buff2, "E:\\Mask_RCNN-master\\My Images\\cv2_mask\\%d.png", i);
    sprintf_s(buff1, "./My Images/labelme_json/%d_json/label.png", i);
    sprintf_s(buff2, "./My Images/cv2_mask/%d.png", i);
    //sprintf(buff1,"/media/lj/FA68-10A6/test_drug/disp/disp_%d.png",i);
    //sprintf(buff2,"/media/lj/FA68-10A6/test_drug/disp_8/disp_%d.png",i);
    //Mat src;
    //Mat dst;
    Mat src = imread(buff1, IMREAD_UNCHANGED);
    Mat ff = Mat::zeros(src.rows, src.cols, CV_8UC1);
    for(int k = 0; k<src.rows; k++)
    {
        for (int kk=0; kk<src.cols; kk++)
        {
            int n = src.at<ushort>(k, kk);
            ff.at<uchar>(k, kk) = n;
        }
    }
    imwrite(buff2,ff);
}
return 0;
}

I get the error: ##

  • OpenCV(4.1.0) Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file c:\opencv\build\include\opencv2\core\mat.inl.hpp, line 1145
  • OpenCV: terminate handler is called! The last OpenCV error is: OpenCV(4.1.0) Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file c:\opencv\build\include\opencv2\core\mat.inl.hpp, line 1145

I hope to get your advice. Thank you

edit retag flag offensive close merge delete

Comments

1

I used this code in Visual Studio 2017 to convert the 16-bit grayscale image

don't. use src.convertTo(dst,CV_8U); instead.

berak gravatar imageberak ( 2019-06-28 08:30:55 -0600 )edit

Do you mean that one line of code can replace Mat ff = Mat::zeros(src.rows, src.cols, CV_8UC1);with src.convertTo(dst,CV_8U);

Yik gravatar imageYik ( 2019-06-28 23:28:38 -0600 )edit

no, a single line will replace your whole, ill-fated for-loops

berak gravatar imageberak ( 2019-06-28 23:30:46 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
0

answered 2019-06-29 01:37:51 -0600

Yik gravatar image

Thanks. Replace these Mat ff = Mat::zeros(src.rows, src.cols, CV_8UC1); for(int k = 0; k<src.rows; k++) { for (int kk=0; kk<src.cols; kk++) { int n = src.at<ushort>(k, kk); ff.at<uchar>(k, kk) = n; } } imwrite(buff2,ff); }

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2019-06-28 04:12:45 -0600

Seen: 5,217 times

Last updated: Jun 28 '19