특정 이미지 처리 코드에 opencv를 사용하고 있습니다. 특정 그림에서 색 레이어를 추출해야합니다. 그래서 내가하는 일은 픽셀을 일정한 값으로 유지하고 나머지 픽셀을 배경색 (이 경우 흰색)으로 설정하는 것입니다. 특정 문제에 대해서는 CIE-L * a * b * 색상 공간에서이 전체 작업을 수행해야합니다. 위의 이미지를 RGB로 변환 할 때 cvCvtColor()
배경을 더 이상 흰색으로 사용하지 않으면 문제가 발생합니다. 다른 순열과 값 조합을 시도했지만 빨강 또는 파랑 또는 순수한 흰색이 아닌 다른 값이됩니다.CIE L * a * b *에서 흰색을 표현할 때 opencv를 사용하는 RGB 변환
페인트 (그냥 흰색)로 그림을 만들고 L * a * b * 공간으로 변환하여 텍스트 파일에 값을 인쇄했습니다. 다음은이 모든 세 개의 값이 255로 보여줍니다 코드
IplImage *image, *lab;
uchar *data;
FILE *fp;
int i, j;
image = cvLoadImage("white.png", CV_LOAD_IMAGE_UNCHANGED);
lab = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 3);
cvCvtColor(image, lab, CV_BGR2Lab);
data = (uchar*)lab->imageData;
fp= fopen("white.txt", "w");
for(i=0; i<lab->height; i++)
for(j=0; j<lab->width; j++)
fprintf(fp, "L = %d, a = %d, b = %d\n", data[i*lab->widthStep + j*lab->nChannels +0], data[i*lab->widthStep + j*lab->nChannels +0], data[i*lab->widthStep + j*lab->nChannels +0]);
하지만 난 그것에 내 필요한 프로그램의 픽셀 값을 설정하면, 그것은 붉은 색이된다. 여기
는 픽셀 값image = cvLoadImage("pic11.png", CV_LOAD_IMAGE_UNCHANGED);
cvCvtColor(image, lab, CV_BGR2Lab);
copy = cvCreateImage(cvSize(lab->width,lab->height), IPL_DEPTH_8U, 3);
cvCopy(lab, copy, NULL);
data2 = (uchar*)copy->imageData;
copied = cvCreateImage(cvSize(copy->width,copy->height), IPL_DEPTH_8U, 3);
data = (uchar*)copied->imageData;
for(i=x; i<copy->height; i++)
for(j=y; j<copy->width; j++)
{
if(data2[i*copy->widthStep + j*copy->nChannels + 0] == r &&
data2[i*copy->widthStep + j*copy->nChannels + 1] == g &&
data2[i*copy->widthStep + j*copy->nChannels + 2] == b)
{
data[i*copy->widthStep + j*copy->nChannels + 0] = r;
data[i*copy->widthStep + j*copy->nChannels + 1] = g;
data[i*copy->widthStep + j*copy->nChannels + 2] = b;
}
else
{
data[i*copy->widthStep + j*copy->nChannels + 0] = 255;
data[i*copy->widthStep + j*copy->nChannels + 1] = 255;
data[i*copy->widthStep + j*copy->nChannels + 2] = 255;
}
}
copy_im = cvCreateImage(cvSize(copied->width,copied->height), IPL_DEPTH_8U, 3);
cvCvtColor(copied, copy_im, CV_Lab2BGR);
cvSaveImage("copy.jpg", copy_im);
어떤 도움은 매우 극명하게 될 것이다을 설정하는 코드입니다. 미리 감사드립니다!
적어도 L * a * b *의 숫자가 일반적으로 사용되므로 255라는 세 값은 모두 의미가 없습니다. L은 일반적으로 0에서 100까지만 사용됩니다. 적어도 메모리가 작동하면 100, 0, 0은 순수한 흰색을 주어야합니다. 편집 : 빠른 테스트는 Photoshop (하나는 동의 함)이 동의하는 것으로 보입니다. L, a 및 b 값에 대해 100, 0, 0을 입력하면 RGB 255, 255, 255가됩니다. –
CIELab white는 (100,0, 0). 너 (255,255,255) 가고 있니? 이것은 매우 잘못되었습니다. –
내가 255 255 255 얻을 이유는 변환 할 수있는 색 함수가 L, a, b 값을 0-255 범위로 매핑하는 것 때문입니다. 일반적으로 나는 값이 '0≤L≤100, -127≤a≤127, -127≤b≤127'인 것을 안다. 그러나 변환 색상 함수는 'L
Koustav