write
|
Thought about C++ OpenCV image generation for a few seconds
Анализ и исправление:
Программа на C++ с использованием OpenCV для создания изображения 3x3 клеток по 66x66 пикселей каждая, без using namespace, с чёткими комментариями.
Цвета и итоговый результат соответствуют ранее описанному преобразованию (поворот на 180 градусов):
Строка 1: Black, Black, Black
Строка 2: Black, Black, Blue
Строка 3: Red, Gray, Gray
Проверить код на соответствие условию: код с OpenCV, без using namespace, комментарии на английском.
Итоговый код корректен, компилируем и генерируем rotated_result.png.
#include <opencv2/opencv.hpp> // Include OpenCV header
#include <vector>
int main() {
// Each cell is 66x66 pixels
const int cell_size = 66;
const int rows = 3;
const int cols = 3;
const int img_width = cols * cell_size;
const int img_height = rows * cell_size;
// Define BGR colors (OpenCV uses BGR format)
cv::Vec3b black(0, 0, 0);
cv::Vec3b blue(255, 0, 0); // Blue in BGR: (255, 0, 0)
cv::Vec3b red(0, 0, 255); // Red in BGR: (0, 0, 255)
cv::Vec3b gray(128, 128, 128);
// Define the resulting 3x3 color grid after rotation
// top row = row 0; each element is a cv::Vec3b color
std::vector<std::vector<cv::Vec3b>> color_grid = {
{black, black, black},
{black, black, blue},
{red, gray, gray}
};
// Create a blank image
cv::Mat img = cv::Mat::zeros(img_height, img_width, CV_8UC3);
// Fill the image with the colors from the grid
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
cv::Vec3b color = color_grid[r][c];
// Fill the cell (r,c) with the specified color
for (int y = r * cell_size; y < (r + 1) * cell_size; y++) {
for (int x = c * cell_size; x < (c + 1) * cell_size; x++) {
img.at<cv::Vec3b>(y, x) = color;
}
}
}
}
// Save the result as PNG
cv::imwrite("rotated_result.png", img);
return 0;
}
|