Zaktualizuj 'examples/example_win32_directx11/main.cpp'

This commit is contained in:
Jerzy Kwiatkowski 2023-07-06 16:36:11 +02:00
parent a0c682dc70
commit 46ee5c27a9

View File

@ -423,6 +423,20 @@ void binaryTransform(unsigned char* grayscaleImage, unsigned char* binaryImage,
} }
} }
//void binaryTransform(const unsigned char* image, unsigned char* binaryImage, int threshold, int width, int height, int channels)
//{
// for (int i = 0; i < width * height; i++) {
// unsigned char brightness = 0.2126f * image[i * channels] + 0.7152f * image[i * channels + 1] + 0.0722f * image[i * channels + 2];
//
// if (brightness < threshold) {
// binaryImage[i] = 0;
// }
// else {
// binaryImage[i] = 255;
// }
// }
//}
int calculateOtsuThreshold(const unsigned char* image, int width, int height) { int calculateOtsuThreshold(const unsigned char* image, int width, int height) {
int histogram[256] = {0}; int histogram[256] = {0};
@ -465,11 +479,11 @@ int calculateOtsuThreshold(const unsigned char* image, int width, int height) {
return threshold; return threshold;
} }
void hough_transform(unsigned char* input_image, int width, int height, int threshold) void hough_transform(const unsigned char* input_image, int width, int height, int threshold, unsigned char* hough_image, int channel)
{ {
int hough_width = 2 * (width + height); int hough_width = 2 * (width + height);
int hough_height = 180; int hough_height = 180;
int* hough_space = new int[hough_width * hough_height](); int* hough_space = new int[hough_width * hough_height];
for (int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
@ -497,7 +511,7 @@ void hough_transform(unsigned char* input_image, int width, int height, int thre
} }
} }
unsigned char* hough_image = new unsigned char[hough_width * hough_height * 3](); hough_image = new unsigned char[hough_width * hough_height * channel];
for (int y = 0; y < hough_height; y++) for (int y = 0; y < hough_height; y++)
{ {
for (int x = 0; x < hough_width; x++) for (int x = 0; x < hough_width; x++)
@ -508,6 +522,7 @@ void hough_transform(unsigned char* input_image, int width, int height, int thre
hough_image[3 * (y * hough_width + x) + 2] = value; hough_image[3 * (y * hough_width + x) + 2] = value;
} }
} }
delete[] hough_space;
} }
int main(int, char**) int main(int, char**)
@ -622,8 +637,9 @@ int main(int, char**)
int my_image_height = 0; int my_image_height = 0;
int my_image_channels = 0; int my_image_channels = 0;
unsigned char* image_data = ImageData(image_location, my_image_width, my_image_height, my_image_channels); unsigned char* image_data = ImageData(image_location, my_image_width, my_image_height, my_image_channels);
unsigned char* grayscaleImage = new unsigned char[my_image_width * my_image_height]; unsigned char* grayscaleImage = new unsigned char[my_image_width * my_image_height * my_image_channels];
unsigned char* binaryImage = new unsigned char[my_image_width * my_image_height]; unsigned char* binaryImage = new unsigned char[my_image_width * my_image_height * my_image_channels];
unsigned char* hough_image = nullptr;
if (colorR == NULL && colorB == NULL && colorG == NULL) { if (colorR == NULL && colorB == NULL && colorG == NULL) {
colorR = new int[256]; colorR = new int[256];
colorG = new int[256]; colorG = new int[256];
@ -665,7 +681,7 @@ int main(int, char**)
} }
if (hough) if (hough)
{ {
hough_transform(image_data, my_image_width, my_image_height, calculateOtsuThreshold(image_data, my_image_width, my_image_height)); hough_transform(image_data, my_image_width, my_image_height, 125, hough_image, my_image_channels);
} }
if (histogram) if (histogram)
{ {
@ -699,6 +715,11 @@ int main(int, char**)
delete[] grayscaleImage; delete[] grayscaleImage;
stbi_image_free(image_data); stbi_image_free(image_data);
} }
else if (hough == TRUE) {
bool ret = LoadTextureFromFile(hough_image, my_image_width, my_image_height, &my_texture);
delete[] hough_image;
stbi_image_free(image_data);
}
else { else {
bool ret = LoadTextureFromFile(image_data, my_image_width, my_image_height, &my_texture); bool ret = LoadTextureFromFile(image_data, my_image_width, my_image_height, &my_texture);
stbi_image_free(image_data); stbi_image_free(image_data);