以下代碼實現了將圖像分成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;
}
結果顯示: