u010173707 2018-11-22 07:23 采纳率: 0%
浏览 1068

cuda简单图像处理,结果图像是全黑的,不知道哪里出问题了,跪求指导!

device float near_color(float3 color1, float3 color2){
//BGR to YUV
float Y1 = 0.299*color1.z + 0.587*color1.y + 0.114*color1.x;
float U1 = -0.147*color1.z - 0.289*color1.y + 0.436*color1.x;
float V1 = 0.615*color1.z - 0.515*color1.y - 0.100*color1.x;

double Y2 = 0.299*color2.z + 0.587*color2.y + 0.114*color2.x;
double U2 = -0.147*color2.z - 0.289*color2.y + 0.436*color2.x;
double V2 = 0.615*color2.z - 0.515*color2.y - 0.100*color2.x;

float distance = (U1 - U2)*(U1 - U2) + (V1 - V2)*(V1 - V2) + (Y1 - Y2)*(Y1 - Y2);
return distance;

}

global void near_color_edge_detect(float3* dataIn, float4 *dataOut, int width, int height)
{

int xIndex = threadIdx.x + blockIdx.x * blockDim.x;
int yIndex = threadIdx.y + blockIdx.y * blockDim.y;
float3 colorC, colorL, colorR, colorT, colorB;
double nearcolor_value = 0.00;
float4 out;

if (xIndex + 1 < width && yIndex + 1 < height &&xIndex - 1 >= 0 && yIndex - 1 >= 0)
{
    colorC = dataIn[yIndex *width + xIndex ];
    colorL = dataIn[yIndex *width + xIndex - 1];
    colorR = dataIn[yIndex *width + xIndex + 1];
    colorT = dataIn[(yIndex - 1) *width + xIndex];
    colorB = dataIn[(yIndex + 1) *width + xIndex];

    out.x = 1.0;
    out.y = 1.0;
    out.z = 1.0;
    out.w = 1.0;

    if ( (near_color(colorL, colorR) >= nearcolor_value) ) {
        if (near_color(colorL, colorC) < near_color(colorC, colorR)) {
            out.x = 1.0;                
            out.y = 0.0;
            out.z = 0.0;
            out.w = 1.0;
        }
        else{
            out.x = -1.0;
            out.y = 0.0;
            out.z = 0.0;
            out.w = 1.0;
        }
    }

    if (near_color(colorT, colorB) >= nearcolor_value) {
        if (near_color(colorT, colorC)<near_color(colorC, colorB)) {
            out.x = 0.0;
            out.y = 1.0;
            out.z = 0.0;
            out.w = 1.0;
        }
        else{
            out.x = 0.0;
            out.y = -1.0;
            out.z = 0.0;
            out.w = 1.0;
        }
    }
    dataOut[yIndex *width + xIndex] = out;
}

}

刚刚接触cuda编程,想把之前写的一个函数改写一下,结果输出的结果总是全黑的,不知道是哪里出了问题,估计是在使用near_color函数做if else判断的时候出了问题,求知道的大神不吝赐教,非常感谢!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!