为什么这段代码用指针data无法修改到图像右侧的像素点?
#include
#include
#include
#include
#define N 32
using namespace cv;
void threevalue(uchar* data);
void fourvalue(uchar* data);
int main()
{
char* picName = "a.jpg";
Mat picA = imread(picName);
imshow("原图", picA);
int nr = picA.rows;
int nc = picA.cols;
for (int j = 0; j
uchar* data = picA.ptr(j);
for (int i = 0; i<nc; i++) {
switch (*data / N)
{
case 7:*data++ = 255;
if (*data / N >= 5){ *data++ = 255; threevalue(data); }
else if (*data / N >= 2){ *data++ = 128; threevalue(data); }
else if (*data / N >= 0){ *data++ = 0; threevalue(data); };
break;
case 6:
case 5:*data++ = 192;
if (*data / N >= 5){
*data++ = 192; *data++ = 192; }
else{ *data++ = 128; threevalue(data); };
break;
case 4:
case 3:*data++ = 128;
if (*data / N >= 6){ *data++ = 255; threevalue(data); }
else if (*data / N >= 4){ *data++ = 128; fourvalue(data); }
else if (*data / N >= 2){ *data++ = 64; *data++ = 0; }
else if (*data / N >= 0){ *data++ = 0; fourvalue(data); }
break;
case 2:
case 1:*data++ = 64;
if (*data / N >= 6){ *data++ = 255; *data++ =0; }
else if (*data / N >= 4){ *data++ = 128; threevalue(data); }
else if (*data / N >= 2){ *data++ = 64; if (*data / N >= 4)*data++ = 128; else *data++ = 0; }
else if (*data / N >= 0){ *data++ = 0; threevalue(data); }
break;
case 0:*data++ = 0;
if (*data / N >= 6){ *data++ = 255; threevalue(data); }
else if (*data / N >= 4){ *data++ = 128; threevalue(data); }
else if (*data / N >= 2){ *data++ = 64; if (*data / N >= 4)*data++ = 128; else *data++ = 0; }
else if (*data / N >= 0){ *data++ = 0; fourvalue(data); }
break;
default:
break;
}
//printf("%d\t", *data);
}
}
imshow("效果图", picA);
waitKey();
return 0;
}
void threevalue(uchar* data)
{
switch (*data / N)
{
case 7:case 6:
case 5:*data++ = 255; break;
case 4:case 3:
case 2:*data++ = 128; break;
case 1:
case 0:*data++ = 0; break;
default:break;
}
}
void fourvalue(uchar* data)
{
switch (*data / N)
{
case 7:
case 6:*data++ = 255; break;
case 5:
case 4:*data++ = 128; break;
case 3:
case 2:*data++ = 64; break;
case 1:
case 0:*data++ = 0; break;
default:break;
}
}