本意是有两幅图片,一个小的,一个大的,小的图片是大图片中一部分。
如图:
应该是统计像素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;
}