您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 关于修改像素点颜色的问题
本帖共有517个阅读者
发表帖子 发表投票 回复主题
关于修改像素点颜色的问题
kmxtye(论坛新手)
kmxtye
头衔:社区公民
帮派:无帮无派
帖数:21
金钱:244
积分:22
注册时间:2014/7/17
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
关于修改像素点颜色的问题
尽量描述清楚这个问题,因为我自己还蒙蒙的,现在我视频解码芯片采集完模拟视频信号后,然后输出为ITU656/YCbCr4:2:2格式,经过548的PPI2的DMA到内存BufferB[],现在我对BufferB[]里的YCbCr4:2:2格式数据进行二值化处理,当然这里只需要对Y分量进行二值化处理就行,核心程序如下:
int UVClip(unsigned char *pDst, unsigned char *pSrc, int trigval, unsigned int range)
{
    int i,j;
    unsigned int posx[4][2] = { {0, 0}, {180, 540}, {240, 480}, {240, 480} };
    unsigned int posy[4][2] = { {0, 0}, { 70, 218}, { 70, 218}, {108, 180} };
    unsigned char *ptr, *pDstBuf;
    unsigned char ucInval;
    static int cnt = 0;
    static int timecnt = 0;

    unsigned int rg;

    if (range > 4)
    {
        rg = 0;
    }
    else
    {
        rg = range;
    }
    
    ptr = (unsigned char*)((int)pSrc + 1);

    pDstBuf = (unsigned char*)((int)pDst + 1);

    for(j = 0; j < 288; j++)
    {
        for ( i = 0; i < 720; i++)
        {
            ucInval = *ptr;
            if(ucInval < trigval)
            {
                *pDstBuf = 0x10;//0x10
            }
            else
            {
                *pDstBuf = *ptr;
                if ( (i > posx[rg][0])&&(i < posx[rg][1])&&(j > posy[rg][0])&&(j < posy[rg][1]))
                {
                    cnt++;
                }
            }
            ptr += 2;
            pDstBuf += 2;
        }
    }

    _DrawRect(pDst, posx[rg][0], posy[rg][0], posx[rg][1], posy[rg][1]);

    if(25==timecnt++)
    {
        timecnt = 0;
        stSysStat.uvcps = cnt/25;
        gUiUpdate = 1;
        cnt = 0;
        if (stSysStat.uvrange > 0)
        {
            SendCnt2Sys(stSysStat.uvcps);
        }
    }
    return (stSysStat.uvcps);
}
然后显示屏可以显示背景为黑色,中间有很多白色像素点,(我这里的摄像头是采集的紫外光子,同时对光子计数),问题是,我想改变这个白色的像素点为蓝色或者黄色或者红色等等,应该如何操作?感谢大神帮忙花点时间看看,先谢谢了


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/9/2 16:57:48
kmxtye(论坛新手)
kmxtye
头衔:社区公民
帮派:无帮无派
帖数:21
金钱:244
积分:22
注册时间:2014/7/17
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
小顶一下

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/9/3 8:34:36
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
首先,确认你的液晶屏显示数据的模式,如果是RGB888模式,你找到最后送入液晶屏显示区域的内存,这里面每3个byte表示一个像素,每一位代表红,绿,蓝,当白色显示时,3个值都为FF,如果显示红色,你把FF FF FF,改为 FF 00  00 就可以了。
如果是RGB565模式,每两个byte表示一个像素点,红,绿,蓝 分别占 5bit,6bit,5bit。修改相应的比特即可。
BF54x上有RGB数据裁剪功能,即使硬件上是RGB565设计,送数据时仍可以按照RGB888送,如果你是这种模式,只需要按照RGB888数据格式修改就可以了

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/9/3 21:24:02
kmxtye(论坛新手)
kmxtye
头衔:社区公民
帮派:无帮无派
帖数:21
金钱:244
积分:22
注册时间:2014/7/17
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
感谢andy回答,我自己后来决绝了,我直接通过rgb和ycbcr的转换公式,得到想到颜色的Y,Cb,Cr分量,然后我阈值T与Y分量对比,区分出目标物体(前景色)和背景色,然后一次取值原始数据的四个字节,即每次区的四个字节为cb,y,cr,y分量,然后给前景像素点直接赋值我们之前转换得到的颜色分量,至于显示部分已有转换算法,我做了原始的数据的改变,显示部分正常正确。我的理解就这些。结果是正确的,可能表述的有些不合理,哈哈。



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/9/4 11:13:00
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
也可以这么做,只是YCrCb的颜色数据没有RGB的好理解,只要找到方法能解决就好

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/9/4 21:07:32
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159985 Call, 1 Queries, Processed in 0.031250 second(s),