我正在使用此代码来打印OpenCV Mat像素的强度。但是,我在控制台上打印字符而不是0到250之间的值:
image1 = imread(nameJpg, 0);
image2 = imread(lastJpg, 0);
for (int j = 0; j < image1.rows-10; j += 1){
for (int i = 0; i < image1.cols-10; i += 1) {
std::cout << "" << image1.at<uchar>(i, j) << " " <<i mage1.at<uchar>(i, j)<<"\n";
}
}
我该如何解决这个问题?
答案 0 :(得分:2)
您想将其强制转换为int,例如:
(int)image.at<uchar>(i, j)
您可以参考ASCII table。
进行测试修改强>
您提及的错误来源是您访问像素的方式。我应该是行,j是列。
for (int i = 0; i < src.rows; i++) {
for (int j = 0; j < src.cols; j++)
cout << (int)src.at<uchar>(i, j) << " ";
cout << endl;
}
答案 1 :(得分:0)
在灰色图像中,像素强度在0到255之间而不是250.
如果您想获得某个像素的值,可以使用:
auto image=cv::imread(path,CV_LOAD_IMAGE_GRAYSCALE);
auto pixel_value=image.at<uchar>(row_idx,col_idx);
OP编辑后:
如果您想在打印时获取数字而不是字符,请改用:
auto pixel_value= static_cast<unsigned int>(image.at<uchar>(row_idx,col_idx));