📄 sys_tps_bfshape.cpp
字号:
f_curr[i] = out_image[i]; mask_curr[i] = out_mask[i]; } delete out_image; delete out_mask;}//~OBSSFIX_MODE3//~OBSS_SAIT_991015Void inv_convertYuv(const CVOPU8YUVBA* pvopcSrc, PixelC* destY, PixelC* destU, PixelC* destV, Int width, Int height){ CoordI x, y; Int Fwidth = pvopcSrc->whereY ().width; Int FwidthUV = pvopcSrc->whereUV ().width; Int nSkipYPixel = Fwidth * EXPANDY_REF_FRAME + EXPANDY_REF_FRAME; Int nSkipUVPixel = FwidthUV * EXPANDUV_REF_FRAME + EXPANDUV_REF_FRAME; PixelC* ppxlcY = (PixelC*)((pvopcSrc->pixelsY ()) + nSkipYPixel ); PixelC* ppxlcU = (PixelC*)((pvopcSrc->pixelsU ()) + nSkipUVPixel ); PixelC* ppxlcV = (PixelC*)((pvopcSrc->pixelsV ()) + nSkipUVPixel ); PixelC* pdY = destY; PixelC* pdU = destU; PixelC* pdV = destV; PixelC* psY; PixelC* psU; PixelC* psV; // convert for (y = 0; y < height; y++) { psY = ppxlcY; for (x = 0; x < width; x++) { *psY = *pdY; pdY++; psY++; } ppxlcY += Fwidth; } for (y = 0; y < height/2; y++) { psU = ppxlcU; for (x = 0; x < width/2; x++) { *psU = *pdU; pdU++; psU++; } ppxlcU += FwidthUV; } for (y = 0; y < height/2; y++) { psV = ppxlcV; for (x = 0; x < width/2; x++) { *psV = *pdV; pdV++; psV++; } ppxlcV += FwidthUV; }/* printf("======== width = %d, height = %d\n", width, height); FILE *fp; fp = fopen("bbb", "w"); fwrite(destY, sizeof (PixelC), width*height, fp); fwrite(destU, sizeof (PixelC), width*height/4, fp); fwrite(destV, sizeof (PixelC), width*height/4, fp); fclose(fp); exit(1);*/}Void convertYuv(const CVOPU8YUVBA* pvopcSrc, PixelC* destY, PixelC* destU, PixelC* destV, Int width, Int height){ CoordI x, y; Int Fwidth = pvopcSrc->whereY ().width; Int FwidthUV = pvopcSrc->whereUV ().width; Int nSkipYPixel = Fwidth * EXPANDY_REF_FRAME + EXPANDY_REF_FRAME; Int nSkipUVPixel = FwidthUV * EXPANDUV_REF_FRAME + EXPANDUV_REF_FRAME; PixelC* ppxlcY = (PixelC*)((pvopcSrc->pixelsY ()) + nSkipYPixel ); PixelC* ppxlcU = (PixelC*)((pvopcSrc->pixelsU ()) + nSkipUVPixel ); PixelC* ppxlcV = (PixelC*)((pvopcSrc->pixelsV ()) + nSkipUVPixel ); PixelC* pdY = destY; PixelC* pdU = destU; PixelC* pdV = destV; PixelC* psY; PixelC* psU; PixelC* psV; // convert for (y = 0; y < height; y++) { psY = ppxlcY; for (x = 0; x < width; x++) { *pdY = *psY; pdY++; psY++; } ppxlcY += Fwidth; } for (y = 0; y < height/2; y++) { psU = ppxlcU; for (x = 0; x < width/2; x++) { *pdU = *psU; pdU++; psU++; } ppxlcU += FwidthUV; } for (y = 0; y < height/2; y++) { psV = ppxlcV; for (x = 0; x < width/2; x++) { *pdV = *psV; pdV++; psV++; } ppxlcV += FwidthUV; }}Void convertSeg(const CVOPU8YUVBA* pvopcSrc, PixelC* destBY, PixelC* destBUV, Int width, Int height, Int left, Int right, Int top, Int bottom){ CoordI x, y; Int Fwidth = pvopcSrc->whereY ().width; Int sum, color = 0; Int nSkipYPixel = Fwidth * EXPANDY_REF_FRAME + EXPANDY_REF_FRAME; PixelC* ppxlcBY = (PixelC*)((pvopcSrc->pixelsBY ()) + nSkipYPixel ); PixelC* pdBY = destBY; PixelC* pdBUV = destBUV; PixelC* psBY; // convert for (y = 0; y < height; y++) { psBY = ppxlcBY; for (x = 0; x < width; x++) { if(left <= x && x < right && top <= y && y < bottom) *pdBY = *psBY; else{ *pdBY = *psBY = 0; // set zero for out side of VOP rectangle } if(*pdBY>0) color = *pdBY; pdBY++; psBY++; } ppxlcBY += Fwidth; }// if(color == 0){// printf("!!! No object !!!\n");// exit(1);// } for (y = 0; y < height/2; y++) { for (x = 0; x < width/2; x++) { sum = *(destBY + 2*y*width + 2*x) + *(destBY + (2*y+1)*width + 2*x) + *(destBY + 2*y*width + 2*x+1) + *(destBY + (2*y+1)*width + 2*x+1); if(sum>0) *pdBUV = color; else *pdBUV = 0; pdBUV++; } }}// modified Oct. 1 '97 (by Watanabe and Katata)/* NBIT: change unsigned char to PixelCVoid pre_pad(unsigned char *mask, unsigned char *curr, int width, int height)*/Void pre_pad(PixelC *mask, PixelC *curr, int width, int height){ int i, j; int flag_cnt = 0; int *flag_blk, *mask_blk; double *curr_blk; double pad_val = 0.0; int ic, jc; double *hori_blk, *vert_blk; int *hori_flag_blk, *vert_flag_blk; flag_blk = (int *)malloc(sizeof(int)*width*height); mask_blk = (int *)malloc(sizeof(int)*width*height); curr_blk = (double *)malloc(sizeof(double)*width*height); // Oct. 1 '97 hori_blk = (double *)malloc(sizeof(double)*width*height); vert_blk = (double *)malloc(sizeof(double)*width*height); hori_flag_blk = (int *)malloc(sizeof(int)*width*height); vert_flag_blk = (int *)malloc(sizeof(int)*width*height); for(j = 0; j < height; j++) for(i = 0; i < width; i++) { mask_blk[j * width + i] = (mask[j * width + i] != 0); if(mask_blk[j * width + i]) hori_blk[j * width + i] = vert_blk[j * width + i] = curr_blk[j * width + i] = (double) curr[j * width + i]; else hori_blk[j * width + i] = vert_blk[j * width + i] = curr_blk[j * width + i] = 0; } for(j = 0; j < height; j++) for(i = 0; i < width; i++) flag_cnt+= (flag_blk[j * width + i] = mask_blk[j * width + i]); if(flag_cnt == 0) return; while(flag_cnt != 0) { for(j = 0; j < height; j++) for(i = 0; i < width; i++) hori_flag_blk[j * width + i] = vert_flag_blk[j * width + i] = flag_blk[j * width + i]; for(j = 0; j < height; j++) for(i = 0; i < width; i++){ mask_blk[j * width + i] = flag_blk[j * width + i]; hori_blk[j * width + i] = vert_blk[j * width + i] = curr_blk[j * width + i]; } for(j = 0; j < height; j++) {/* horizontal scan */ for(ic = 1; ic < width; ic++) if(mask_blk[j * width + ic-1] - mask_blk[j * width + ic] == 1) break; for(i = ic; i < width; i++) { if(mask_blk[j * width + i-1] - mask_blk[j * width + i] == 1) pad_val = hori_blk[j * width + i-1]; if(!mask_blk[j * width + i]) { hori_blk[j * width + i]+= pad_val; hori_flag_blk[j * width + i]++; } } for(ic = width-2; ic >= 0; ic--) if(mask_blk[j * width + ic+1] - mask_blk[j * width + ic] == 1) break; for(i = ic; i >= 0; i--) { if(mask_blk[j * width + i+1] - mask_blk[j * width + i] == 1) pad_val = hori_blk[j * width + i+1]; if(!mask_blk[j * width + i]) { hori_blk[j * width + i]+= pad_val; hori_flag_blk[j * width + i]++; } } }/* end of horizontal scan */ for(j = 0; j < height; j++) for(i = 0; i < width; i++) if(hori_flag_blk[j * width + i] != 0) { hori_blk[j * width + i] = (int)(hori_blk[j * width + i]/(double) hori_flag_blk[j * width + i]); // Oct.1 '97 hori_flag_blk[j * width + i]/= hori_flag_blk[j * width + i]; } for(i = 0; i < width; i++) {/* vertical scan */ for(jc = 1; jc < height; jc++) if(mask_blk[(jc-1) * width + i] - mask_blk[jc * width + i] == 1) break; for(j = jc; j < height; j++) { if(mask_blk[(j-1) * width + i] - mask_blk[j * width + i] == 1) pad_val = vert_blk[(j-1) * width + i]; if(!mask_blk[j * width + i]) { vert_blk[j * width + i]+= pad_val; vert_flag_blk[j * width + i]++; } } for(jc = height-2; jc >= 0; jc--) if(mask_blk[(jc+1) * width + i] - mask_blk[jc * width + i] == 1) break; for(j = jc; j >= 0; j--) { if(mask_blk[(j+1) * width + i] - mask_blk[j * width + i] == 1) pad_val = vert_blk[(j+1) * width + i]; if(!mask_blk[j * width + i]) { vert_blk[j * width + i]+= pad_val; vert_flag_blk[j * width + i]++; } } }/* end of vertical scan */ for(j = 0; j < height; j++) for(i = 0; i < width; i++) if(vert_flag_blk[j * width + i] != 0) { vert_blk[j * width + i] = (int)(vert_blk[j * width + i]/(double) vert_flag_blk[j * width + i]); // Oct.1 '97 vert_flag_blk[j * width + i]/= vert_flag_blk[j * width + i]; } for(j = 0; j < height; j++) for(i = 0; i < width; i++) if(hori_flag_blk[j * width + i] == 1 && vert_flag_blk[j * width + i] == 1) curr_blk[j * width + i] = (int)((hori_blk[j * width + i] + vert_blk[j * width + i])/2.0); else if (hori_flag_blk[j * width + i] == 1) curr_blk[j * width + i] = hori_blk[j * width + i]; else if (vert_flag_blk[j * width + i] == 1) curr_blk[j * width + i] = vert_blk[j * width + i]; flag_cnt = width * height; for(j = 0; j < height; j++) for(i = 0; i < width; i++) if(hori_flag_blk[j * width + i] == 1 || vert_flag_blk[j * width + i] == 1){ flag_blk[j * width + i] = 1; flag_cnt--; } }/* end of while() */ for(j = 0; j < height; j++) for(i = 0; i < width; i++) curr[j * width + i] = (unsigned char) curr_blk[j * width + i]; free(flag_blk); free(mask_blk); free(curr_blk); free(hori_blk); free(vert_blk); free(hori_flag_blk); free(vert_flag_blk);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -