ฉันกำลังอ่านรูปภาพมาตราส่วนสีเทา .img (ส่วนหัว 512 ไบต์, 512 x 512 พิกเซล x 8 บิตต่อพิกเซล)
ที่นั่น ฉันกำลังกำหนดเกณฑ์ในการเปลี่ยนรูปภาพระดับสีเทาให้เป็นรูปภาพไบนารี (ดำ/ขาว)
แต่เมื่อฉันกำหนด 0 ให้กับพิกเซล มันจะกลายเป็นสีฟ้าอ่อน (#01fffd)?!?! เมื่อฉันใช้ค่า 2 มันเกือบจะเป็นสีดำ (#020100)
คุณช่วยอธิบายฉันหน่อยได้ไหมว่ามันมาได้อย่างไร?
ฉันอ่านภาพเช่นนี้:
int width = 512;
int height = 512;
File* imageFilePointerIn = fopen("image.img", "r+b");
File* binaryImageFilePointerOut = fopen("imageOut.img",
"w+b");
unsigned char* header = new unsigned char[512];
unsigned char** imageData = new unsigned char*[width];
unsigned char** binaryImageArray = new unsigned char*[width];
fread(header, sizeof(char), 512, imageFilePointerIn);
for (int i = 0; i < width; i++) {
data[i] = new unsigned char[height];
fread(data[i], sizeof(char), height, imageFilePointerIn);
}
for (int i = 0; i < width; i++) {
binaryImageArray[i] = new unsigned char[height];
}
char unsigned thresholdBinaryImage = 128;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (thresholdBinaryImage <= data[i][j]) {
binaryImageArray[i][j] = 255;
} else {
binaryImageArray[i][j] = 0;
}
}
}
fwrite(header, sizeof(char), headerSize, binaryImageFilePointerOut);
for (int i = 0; i < width; i++) {
fwrite(binaryImageArray[i], sizeof(char), height,
binaryImageFilePointerOut);
}
fclose(binaryImageFilePointerOut);
fclose(imageFilePointerIn);
ฉันไม่รู้ว่าทำไมถึงสามารถแสดงสีได้? สำหรับการแสดง ฉันจะโอนไฟล์ .img ไปเป็นไฟล์ .ras ด้วยโค้ดที่ตัดมาจากอินเทอร์เน็ต แต่ฉันไม่คิดว่าข้อผิดพลาดจะเกิดขึ้นเนื่องจากฉันเห็นผู้อื่นใช้รหัสเดียวกันในการแปลง .img Grayscales เป็น .ras เพียงเพื่อแสดงโดยไม่มีสี
คงจะดีที่จะได้รับข้อเสนอแนะใด ๆ :)