以下代码实现了将图像分成4*4块,然后进行操作:
int main()
{
char* imgPath = "..\\img2.jpg";
//[1] 获取图片数据,并转化成灰度图
Mat img = imread(imgPath);
if (NULL == img.data)
{
printf("read img error!\n");
exit(1);
}
Mat imgGray;
cvtColor(img, imgGray, CV_BGR2GRAY);
// [2] 获取图像相关信息
int nHeight = imgGray.rows;
int nWidth = imgGray.cols;
unsigned char* pData = imgGray.data;
// [3] 将图像分成4*4块
int p = 0, q = 0; //用来标识块索引
for (int ss = 0; ss < 16; ss++)
{
p = ss / 4; //行索引
q = ss % 4; //列索引
for (int i = nHeight*p / 4; i < nHeight*(p + 1) / 4; i++)
{
for (int j = nWidth*q / 4; j < nWidth*(q + 1) / 4;j++)
{
pData[i*nWidth + j] = ss * 255 / 16; //每一块显示一种颜色,用于可视化验证
}
}
}
//[4] 显示图像
namedWindow("img");
imshow("img", imgGray);
waitKey(0);
return 0;
}
结果显示: