{"id":20031760,"url":"https://github.com/astrodynamic/photolab-in-qt-cpp","last_synced_at":"2025-09-20T07:31:46.363Z","repository":{"id":155833132,"uuid":"578921753","full_name":"Astrodynamic/PhotoLab-in-Qt-CPP","owner":"Astrodynamic","description":"PhotoLab is a C++17 program that applies filters to BMP images. It implements the MVC pattern, provides a GUI using the Qt library, and includes convolution filters and color correction algorithms. Developed within the PLab namespace and with a full set of unit-tests.","archived":false,"fork":false,"pushed_at":"2023-05-09T03:43:44.000Z","size":8225,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-04-03T03:51:12.828Z","etag":null,"topics":["bmp-image","cmake","convolution","convolution-filter","cpp","filter","gui","image","image-processing","make","matrix","mvc","qt","qtw","unit-testing"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Astrodynamic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-16T07:55:36.000Z","updated_at":"2024-09-09T03:40:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"fb62eba1-f76d-4fd2-9e6e-909e6d29a580","html_url":"https://github.com/Astrodynamic/PhotoLab-in-Qt-CPP","commit_stats":null,"previous_names":["astrodynamic/photolab-in-qt-cpp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Astrodynamic/PhotoLab-in-Qt-CPP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Astrodynamic%2FPhotoLab-in-Qt-CPP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Astrodynamic%2FPhotoLab-in-Qt-CPP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Astrodynamic%2FPhotoLab-in-Qt-CPP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Astrodynamic%2FPhotoLab-in-Qt-CPP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Astrodynamic","download_url":"https://codeload.github.com/Astrodynamic/PhotoLab-in-Qt-CPP/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Astrodynamic%2FPhotoLab-in-Qt-CPP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276064222,"owners_count":25578997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-20T02:00:10.207Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bmp-image","cmake","convolution","convolution-filter","cpp","filter","gui","image","image-processing","make","matrix","mvc","qt","qtw","unit-testing"],"created_at":"2024-11-13T09:34:37.691Z","updated_at":"2025-09-20T07:31:45.693Z","avatar_url":"https://github.com/Astrodynamic.png","language":"C++","readme":"# PhotoLab Project in Qt/CPP\n\nPhotoLab v1.0 is an open-source image processing application developed in C++17, using the Model-View-Controller pattern and a GUI library with API for C++17. The program provides a pool of ready-made filters, including conversion to grayscale, negative, and toning, as well as the ability to apply convolution filters such as emboss, sharpen, box blur, Gaussian blur, Laplacian filter, and Prewitt filter or Sobel filter. Additionally, the program allows the user to enter an arbitrary filter kernel matrix (up to size 16x16) by hand through a separate dialog window.\n\n\u003cimg src=\"data/img/window.png\" alt=\"Main window\" width=\"1280\" /\u003e\n\n## Dependencies\n\nPhotoLab v1.0 uses the following dependencies:\n\n- CMake 3.15 or higher\n- Qt5 (Widgets module)\n- GTest (for unit tests)\n\n## Build\n\nTo build PhotoLab v1.0, please follow these steps:\n\n1. Clone this repository to your local machine.\n2. In the terminal, navigate to the project's root directory.\n3. Run the following command to build the project: `make all`\n\nTo rebuild the project, run `make rebuild`. To clean the project, run `make clean`.\n\n## Usage\n\nTo use PhotoLab v1.0, please follow these steps:\n\n1. Open the program by running the executable.\n2. Load an arbitrary image in BMP format using the \"Load Image\" button.\n3. Apply a filter from the pool of ready-made filters or enter an arbitrary filter kernel matrix using the appropriate buttons.\n4. Save the result of filtering into a separate file (BMP format) using the \"Save Image\" button.\n\n### Examples\n\nTo apply the \"Negative\" filter to an image, follow these steps:\n\n1. Load an image using the \"Load Image\" button.\n2. Click on the \"Negative\" button.\n3. Save the result using the \"Save Image\" button.\n\nTo apply the \"Gaussian blur\" filter to an image with a 3x3 kernel, follow these steps:\n\n1. Load an image using the \"Load Image\" button.\n2. Enter the filter kernel matrix in the appropriate dialog window.\n3. Click on the \"Gaussian blur\" button.\n4. Save the result using the \"Save Image\" button.\n\n \u003ctable border=\"1\"\u003e\n   \u003ccaption\u003e\n     Filters\n   \u003c/caption\u003e\n   \u003ctr\u003e\n     \u003ctd\u003eGrayscale\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Grayscale.png\" alt=\"Grayscale\" width=\"640\" /\u003e\u003c/td\u003e\n     \u003ctd\u003eNegative\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Negative.png\" alt=\"Negative\" width=\"640\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd\u003ePicking tone\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Toning_pick.png\" alt=\"Picking tone\" width=\"640\" /\u003e\u003c/td\u003e\n     \u003ctd\u003eToning\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Toning.png\" alt=\"Toning\" width=\"640\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd\u003eEmboss\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Emboss.png\" alt=\"Emboss\" width=\"640\" /\u003e\u003c/td\u003e\n     \u003ctd\u003eSharpen\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Sharpen.png\" alt=\"Sharpen\" width=\"640\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd\u003eBox blur\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Box.png\" alt=\"Box blur\" width=\"640\" /\u003e\u003c/td\u003e\n     \u003ctd\u003eGaussian blur\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Gaussian.png\" alt=\"Gaussian blur\" width=\"640\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd\u003eLaplacian filter\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Laplacian.png\" alt=\"Laplacian filter\" width=\"640\" /\u003e\u003c/td\u003e\n     \u003ctd\u003eSobel left\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Sobel_left.png\" alt=\"Sobel left\" width=\"640\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd\u003eSobel right\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Sobel_right.png\" alt=\"Sobel right\" width=\"640\" /\u003e\u003c/td\u003e\n     \u003ctd\u003eSobel full\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Sobel_full.png\" alt=\"Sobel full\" width=\"640\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n     \u003ctd\u003eCustom widget\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Custom_widget.png\" alt=\"Custom widget\" width=\"640\" /\u003e\u003c/td\u003e\n     \u003ctd\u003eCustom filter\u003c/td\u003e\n     \u003ctd\u003e\u003cimg src=\"data/img/Custom.png\" alt=\"Custom\" width=\"640\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n \u003c/table\u003e\n\n## License\n\nPhotoLab v1.0 is licensed under the MIT License. See the [LICENSE](LICENSE) file for more information.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastrodynamic%2Fphotolab-in-qt-cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fastrodynamic%2Fphotolab-in-qt-cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastrodynamic%2Fphotolab-in-qt-cpp/lists"}