打印时像素值奇怪
Weird pixel values when printing out?
我知道这个问题已经得到了回答,但是当我尝试解决方案时,它并没有带我去任何地方。
下面是我编写的给定代码,用于获取图像的左侧和右侧边界,该边界使用精明的边缘检测器OpenCV进行阈值处理。
#include<iostream>
#include<vector>
#include<math.h>
#include<string>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
int thresh = 100,rows = 0,cols = 0;;
Mat src,src_gray,canny_output;
src = imread( argv[1]);
cvtColor( src, src_gray, CV_BGR2GRAY );
blur( src_gray, src_gray, Size(3,3) );
Canny( src_gray, canny_output, thresh, thresh*3, 3 );
Mat boundary_image = Mat::zeros( canny_output.size(), CV_8UC1 );
rows = canny_output.rows;
cols = canny_output.cols;
cout<<rows<<endl<<cols<<endl;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
cout<<canny_output.at<uchar>(i,j)<<endl;
if(canny_output.at<uchar>(i,j) == 255)
{
boundary_image.at<uchar>(i,j) = 255;
break;
}
}
for(int k = cols;k>0;k--)
{
if(canny_output.at<uchar>(i,k) == 255)
{
boundary_image.at<uchar>(i,k) = 255;
break;
}
}
}
imshow("boundary_image",boundary_image);
waitKey(0);
return 0;
}
算法是否有效是次要的,但我无法查看精明边缘检测到的图像的值。它显示一些符号或空值。你能告诉我哪里出错了吗?
注意:问题与打印语句有关
cout<<canny_output.at<uchar>(i,j)<<endl;
这在输出中没有给我任何合理的值来查看像素值。类似的问题发布,答案是使用 uchar 作为数据类型,但就我而言,它不起作用。这听起来可能很简陋,但非常感谢您的帮助。
要正确cout
unsigned char / uchar
,您应该先投射它,例如
cout << (int)canny_output.at<uchar>(i,j) << endl;
要继续阅读,请查看为什么"cout"
对"unsigned char"
很奇怪?
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 使用 waitKey () 时无法打印像素值
- 打印像素值,但图像重叠.图像是其应有大小的三倍
- 打印时像素值奇怪
- 使用 OpenCV 将鼠标指针悬停在图像上时在图像上打印像素坐标