int rcolor, g, b;
int temp1 = 1; int temp2 = 1; int temp3 = 1;
// for (int i = 0; i < height; i++)
// {
// for (int j = 0; j < width; j++)
// {
// rcolor = ((tempim16[(i*width + j) ] & 0x7C00) >> 10);
// g = ((tempim16[(i*width + j) ] & 0x03E0) >> 5);
// b = ((tempim16[(i*width + j) ] & 0x001F));
// int gray = (rcolor * 0.299) + (g * 0.587) + (b*0.114);
// mg_lpImage[i*width + j] = gray<<3;
// }
// }
Mat img1 = imread("image_16.bmp");
Mat img_gray;
cvtColor(img1, img_gray, COLOR_BGR2GRAY);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
mg_lpImage[(height*width) - (i*width + (width - j))]
= img_gray.at<uchar>(i, j);
}
}
해당 칼라 비트는 16비트다. 따라서 일반적으로 int는 들어가기 힘들다. 따라서 short(여기선 tempim16)로 각 픽셀을 저장해야 한다.
또한 and와 shift로 해당 비트를 추출해야 하는데, 맨 처음만 비어있으므로 red는 7c00을 해야 한다.
마지막으로, 이렇게 지정된건 short이므로, 그 값이 매우 작은 데다, 최대값이 32인가? 이다. 근데 최대 gray값은 255이므로, <<3을 통해 이를 확대시켜야 한다.
아래는, gray시키고 있다. uchar은 그레이스케일을, vec3b는 컬러스케일을 출력한다.
double rcolor, gcolor, b;
double gray;
/* for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
rcolor = (double)m_dibFile.m_lpImage[(i*width + j) *3 + 2];
gcolor = (double)m_dibFile.m_lpImage[(i*width + j) *3 + 1];
b = (double)m_dibFile.m_lpImage[(i*width + j) *3 + 0];
rcolor = rcolor * 0.299;
gcolor = gcolor * 0.587;
b = b * 0.114;
gray = floor((rcolor + gcolor + b ));
mg_lpImage[(i)*width + j] = gray;
}
}
*/
Mat img1 = imread("lena_24.bmp");
Mat img_gray;
cvtColor(img1, img_gray, COLOR_BGR2GRAY);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
mg_lpImage[(height*width)-(i*width + (width - j))]
= img_gray.at<uchar>(i,j);
}
}
'미연시리뷰' 카테고리의 다른 글
(알고리즘 설계와 분석)배열에 기반한 그래프의 dfs (0) | 2020.10.08 |
---|---|
os 0-2 1번 임시 swap (2) | 2020.10.02 |
growable array (3) | 2020.08.09 |
더블링크드리스트 보관용 (0) | 2020.08.08 |
잡 (0) | 2020.08.03 |