新手小菜菜求问opencv统计灰度图每个灰度级像素总数并输出,但是没有结果?

bearmomo 2017-10-26 02:51:45
加精
本意是有两幅图片,一个小的,一个大的,小的图片是大图片中一部分。
如图:


应该是统计像素pixcount那里有问题,但是找不出来。我献上我所有的分了,求帮助!

#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat image = imread("test.jpg");
Mat image1 = imread("test1.jpg");
int width = image.cols;
int height = image.rows;
int width1 = image1.cols;
int height1 = image1.rows;
int pixelCount[256] = {0};
int pixelCount1[256] = {0};
float bizhi[256] = { 0 };
int i, j= 0;

//uchar* data = (uchar*)image.data;//uchar * data = image.ptr<uchar>(0)[0];

//Mat::ptr<>()=Mat::data
//统计灰度级中每个像素在整幅图像中的个数
Mat outputimage = image.clone();
for (i = 0; i < height; i++)
{
uchar * data = outputimage.ptr<uchar>(i);//获取第i行首地址
for (j = 0; j < width; i++)
{
pixelCount[data[j]]++;
}
}

Mat outputimage1 = image1.clone();
for (i = 0; i < height1; i++)
{
uchar * data1 = outputimage1.ptr<uchar>(i);//获取第i行首地址
for (j = 0; j < width1; i++)
{
pixelCount1[data1[j]]++;//data[j]=*(data+j)
}
}

//计算每个灰度级在整幅图像中的比例
uchar table[256] = {0};
for (i = 0; i < 256; i++)
{
if (pixelCount1[i]!=0)
{
bizhi[i] = (float)pixelCount[i] / (float)pixelCount1[i];
}
if (bizhi[i] < 0.5)
table[i] = 100;
else
table[i] = 0;
}
Mat lut(1, 256, CV_8U);
//为Mat矩阵添加元素值
uchar *p = lut.data;
for (int i = 0; i < 256; i++)
{
p[i] = table[i];
}
Mat dstImage;
dstImage.create(image.size(), image.type());
//查找表操作
LUT(image, lut, dstImage);
imshow("test", image);
imshow("test2", dstImage);
waitKey(0);
return 0;
}
...全文
9399 57 打赏 收藏 举报
写回复
57 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xieyuan0217 2017-11-30
学习了学习了谢谢了。。。
  • 打赏
  • 举报
回复
星辰韦 2017-11-27
引用 楼主 bearmomo 的回复:
Mat image = imread("test.jpg");
首先读的都不是单通道的图,怎么能直接用呢
  • 打赏
  • 举报
回复
qq_29425957 2017-11-24
我是新手,请各位大侠多多指教。
  • 打赏
  • 举报
回复
NoEdUl 2017-11-20
引用 49 楼 bearmomo 的回复:
[quote=引用 48 楼 u012947309 的回复:] [quote=引用 5 楼 bearmomo 的回复:] for (i = 0; i < height; i++) { uchar * data = image.ptr<uchar>(i);//获取第i行首地址 for (j = 0; j < width; j++) { pixelCount[data[j]]++; } } for (i = 0; i <height1; i++) { uchar * data1 = image1.ptr<uchar>(i);//获取第i行首地址 for (j = 0; j <width1;j++) { pixelCount1[data1[j]]++;//data[j]=*(data+j) } } 我弄明白了 是把for内循环的j++写成i++了 但新的问题又出现了 第一幅图某一个灰度级计算出来的像素个数比第二张的多,很奇怪。。
两张图片除非百分百一样,灰度图才会一样。[/quote]我用的就是opencv鼠标截取功能,在一幅图片截取的两张保存为BMP格式的图片,你可以试试~ [/quote] 那还有什么试的。除非你说你两次鼠标截图一模一样框高和位置。 然后你存下来的BMP格式图一模一样大,不然出来的灰度统计要是一样了那才是小概率事件。
  • 打赏
  • 举报
回复
baidu_35838584 2017-11-20
这个厉害了,工作量复杂
  • 打赏
  • 举报
回复
bearmomo 2017-11-19
引用 48 楼 u012947309 的回复:
[quote=引用 5 楼 bearmomo 的回复:] for (i = 0; i < height; i++) { uchar * data = image.ptr<uchar>(i);//获取第i行首地址 for (j = 0; j < width; j++) { pixelCount[data[j]]++; } } for (i = 0; i <height1; i++) { uchar * data1 = image1.ptr<uchar>(i);//获取第i行首地址 for (j = 0; j <width1;j++) { pixelCount1[data1[j]]++;//data[j]=*(data+j) } } 我弄明白了 是把for内循环的j++写成i++了 但新的问题又出现了 第一幅图某一个灰度级计算出来的像素个数比第二张的多,很奇怪。。
两张图片除非百分百一样,灰度图才会一样。[/quote]我用的就是opencv鼠标截取功能,在一幅图片截取的两张保存为BMP格式的图片,你可以试试~
  • 打赏
  • 举报
回复
NoEdUl 2017-11-16
引用 5 楼 bearmomo 的回复:
for (i = 0; i < height; i++) { uchar * data = image.ptr<uchar>(i);//获取第i行首地址 for (j = 0; j < width; j++) { pixelCount[data[j]]++; } } for (i = 0; i <height1; i++) { uchar * data1 = image1.ptr<uchar>(i);//获取第i行首地址 for (j = 0; j <width1;j++) { pixelCount1[data1[j]]++;//data[j]=*(data+j) } } 我弄明白了 是把for内循环的j++写成i++了 但新的问题又出现了 第一幅图某一个灰度级计算出来的像素个数比第二张的多,很奇怪。。
两张图片除非百分百一样,灰度图才会一样。
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
xchstc829 2017-11-08
学习了学习了
  • 打赏
  • 举报
回复
cattpon 2017-11-08
learning~
  • 打赏
  • 举报
回复
赵4老师 2017-11-07
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
  • 打赏
  • 举报
回复
jiaomingfeng 2017-11-07
长见识了 谢谢。
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
a18027134657 2017-11-06
厉害啊我的哥
  • 打赏
  • 举报
回复
Xc4a 2017-11-06
长见识
  • 打赏
  • 举报
回复
schlafenhamster 2017-11-06
0~255 不是 256 个吗 ?
  • 打赏
  • 举报
回复
no6233470 2017-11-06
学到东西了!
  • 打赏
  • 举报
回复
wsdmw160720 2017-11-05
学习学习
  • 打赏
  • 举报
回复
shortree 2017-11-05
学习一下,谢谢
  • 打赏
  • 举报
回复
Tonykku 2017-11-05
灰阶度不是0~255吗?怎么会256?
  • 打赏
  • 举报
回复
加载更多回复(31)
发帖
图形处理/算法

1.9w+

社区成员

VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
帖子事件
创建了帖子
2017-10-26 02:51
社区公告
暂无公告