gdstyrf 2015-05-01 06:53
浏览 665

opencv像素值读取不到

为什么这段代码用指针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;
}
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题