Zaktualizuj 'examples/example_win32_directx11/main.cpp'
This commit is contained in:
parent
d4b51a8a1f
commit
a0c682dc70
@ -69,7 +69,7 @@ bool LoadTextureFromFile(unsigned char* image_data, int image_width, int image_h
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
// Funkcja dokonuj¹ca dylacji
|
// Funkcja dokonuj¹ca dylacji
|
||||||
void dilation(const unsigned char* image, int width, int height, unsigned char* output) {
|
void dilation(const unsigned char* image, int width, int height, unsigned char* output) {
|
||||||
int structuringElement[3][3] = {
|
int structuringElement[3][3] = {
|
||||||
{0, 255, 0},
|
{0, 255, 0},
|
||||||
@ -97,7 +97,7 @@ void dilation(const unsigned char* image, int width, int height, unsigned char*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Funkcja dokonuj¹ca erozji
|
// Funkcja dokonuj¹ca erozji
|
||||||
void erosion(const unsigned char* image, int width, int height, unsigned char* output) {
|
void erosion(const unsigned char* image, int width, int height, unsigned char* output) {
|
||||||
int structuringElement[3][3] = {
|
int structuringElement[3][3] = {
|
||||||
{0, 255, 0},
|
{0, 255, 0},
|
||||||
@ -125,7 +125,7 @@ void erosion(const unsigned char* image, int width, int height, unsigned char* o
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Funkcja dokonuj¹ca hit-and-miss
|
// Funkcja dokonuj¹ca hit-and-miss
|
||||||
void hitAndMiss(const unsigned char* image, int width, int height, unsigned char* output) {
|
void hitAndMiss(const unsigned char* image, int width, int height, unsigned char* output) {
|
||||||
int structuringElement1[3][3] = {
|
int structuringElement1[3][3] = {
|
||||||
{0, 0, 0},
|
{0, 0, 0},
|
||||||
@ -163,7 +163,7 @@ void hitAndMiss(const unsigned char* image, int width, int height, unsigned char
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Funkcja dokonuj¹ca pogrubiania
|
// Funkcja dokonuj¹ca pogrubiania
|
||||||
void thickening(const unsigned char* image, int width, int height, unsigned char* output) {
|
void thickening(const unsigned char* image, int width, int height, unsigned char* output) {
|
||||||
int structuringElement[3][3] = {
|
int structuringElement[3][3] = {
|
||||||
{0, 255, 0},
|
{0, 255, 0},
|
||||||
@ -189,7 +189,7 @@ void thickening(const unsigned char* image, int width, int height, unsigned char
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Funkcja dokonuj¹ca pocieniania
|
// Funkcja dokonuj¹ca pocieniania
|
||||||
void thinning(const unsigned char* image, int width, int height, unsigned char* output) {
|
void thinning(const unsigned char* image, int width, int height, unsigned char* output) {
|
||||||
int structuringElement[3][3] = {
|
int structuringElement[3][3] = {
|
||||||
{0, 255, 0},
|
{0, 255, 0},
|
||||||
@ -563,6 +563,10 @@ int main(int, char**)
|
|||||||
int* colorG = nullptr;
|
int* colorG = nullptr;
|
||||||
int* colorB = nullptr;
|
int* colorB = nullptr;
|
||||||
|
|
||||||
|
static float sliderValue = 0.5f;
|
||||||
|
float xMin = 0;
|
||||||
|
float xMax = 256 * sliderValue;
|
||||||
|
|
||||||
while (!done)
|
while (!done)
|
||||||
{
|
{
|
||||||
MSG msg;
|
MSG msg;
|
||||||
@ -612,13 +616,6 @@ int main(int, char**)
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (histogram)
|
|
||||||
{
|
|
||||||
ImGui::Begin("Histogram");
|
|
||||||
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (image_window)
|
if (image_window)
|
||||||
{
|
{
|
||||||
int my_image_width = 0;
|
int my_image_width = 0;
|
||||||
@ -628,22 +625,16 @@ int main(int, char**)
|
|||||||
unsigned char* grayscaleImage = new unsigned char[my_image_width * my_image_height];
|
unsigned char* grayscaleImage = new unsigned char[my_image_width * my_image_height];
|
||||||
unsigned char* binaryImage = new unsigned char[my_image_width * my_image_height];
|
unsigned char* binaryImage = new unsigned char[my_image_width * my_image_height];
|
||||||
if (colorR == NULL && colorB == NULL && colorG == NULL) {
|
if (colorR == NULL && colorB == NULL && colorG == NULL) {
|
||||||
colorR = new int[my_image_width * my_image_height];
|
colorR = new int[256];
|
||||||
colorG = new int[my_image_width * my_image_height];
|
colorG = new int[256];
|
||||||
colorB = new int[my_image_width * my_image_height];
|
colorB = new int[256];
|
||||||
|
|
||||||
int place = 0;
|
int place = 0;
|
||||||
|
|
||||||
for (int y = 0; y < my_image_height; ++y)
|
for (int i = 0; i < my_image_width * my_image_height * my_image_channels; i += my_image_channels) {
|
||||||
{
|
colorR[image_data[i]]++;
|
||||||
for (int x = 0; x < my_image_width; ++x)
|
colorG[image_data[i + 1]]++;
|
||||||
{
|
colorB[image_data[i + 2]]++;
|
||||||
int index = (y * my_image_width + x) * 4;
|
|
||||||
|
|
||||||
colorR[place] = image_data[index];
|
|
||||||
colorG[place] = image_data[index + 1];
|
|
||||||
colorB[place++] = image_data[index + 2];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -676,6 +667,21 @@ int main(int, char**)
|
|||||||
{
|
{
|
||||||
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, calculateOtsuThreshold(image_data, my_image_width, my_image_height));
|
||||||
}
|
}
|
||||||
|
if (histogram)
|
||||||
|
{
|
||||||
|
ImGui::Begin("Histogram");
|
||||||
|
float xMin = 0;
|
||||||
|
float xMax = 256 * sliderValue;
|
||||||
|
/*ImPlot::SetNextPlotLimitsX(xMin, xMax, ImGuiCond_Always);*/
|
||||||
|
if (ImPlot::BeginPlot("RGB Histogram")) {
|
||||||
|
ImPlot::PlotHistogram("Red", colorR, 256);
|
||||||
|
ImPlot::PlotHistogram("Green", colorG, 256);
|
||||||
|
ImPlot::PlotHistogram("Blue", colorB, 256);
|
||||||
|
ImPlot::EndPlot();
|
||||||
|
}
|
||||||
|
ImGui::SliderFloat("X-axis Range", &sliderValue, 0.0f, 1.0f);
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
if (!image_data)
|
if (!image_data)
|
||||||
{
|
{
|
||||||
ImGui::Begin("Error");
|
ImGui::Begin("Error");
|
||||||
@ -689,8 +695,8 @@ int main(int, char**)
|
|||||||
ID3D11ShaderResourceView* my_texture = NULL;
|
ID3D11ShaderResourceView* my_texture = NULL;
|
||||||
if (binary == TRUE) {
|
if (binary == TRUE) {
|
||||||
bool ret = LoadTextureFromFile(binaryImage, my_image_width, my_image_height, &my_texture);
|
bool ret = LoadTextureFromFile(binaryImage, my_image_width, my_image_height, &my_texture);
|
||||||
stbi_image_free(binaryImage);
|
delete[] binaryImage;
|
||||||
stbi_image_free(grayscaleImage);
|
delete[] grayscaleImage;
|
||||||
stbi_image_free(image_data);
|
stbi_image_free(image_data);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -700,8 +706,10 @@ int main(int, char**)
|
|||||||
ImGui::Begin("Image window");
|
ImGui::Begin("Image window");
|
||||||
ImGui::Image((void*)my_texture, ImVec2(my_image_width, my_image_height));
|
ImGui::Image((void*)my_texture, ImVec2(my_image_width, my_image_height));
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
ImGui::Begin("Histograms");
|
||||||
|
ImGui::Checkbox("RGB", &histogram);
|
||||||
|
ImGui::End();
|
||||||
ImGui::Begin("Filters");
|
ImGui::Begin("Filters");
|
||||||
ImGui::Checkbox("Histogram", &histogram);
|
|
||||||
ImGui::Checkbox("Negative", &negative);
|
ImGui::Checkbox("Negative", &negative);
|
||||||
ImGui::Checkbox("Sepia", &sepia);
|
ImGui::Checkbox("Sepia", &sepia);
|
||||||
ImGui::Checkbox("Saturation", &saturation);
|
ImGui::Checkbox("Saturation", &saturation);
|
||||||
|
Loading…
Reference in New Issue
Block a user