Я использую самоскомпилированный OpenCv 3.3 с включенными OPENGL и CUDA в Windows 7.
У меня проблемы с отображением изображения в полноэкранном режиме без каких-либо границ.Я использую следующий минимальный пример для своего теста:
// Name of window
std::string name = "Test Window";
// Create window
cv::namedWindow(name, CV_WINDOW_OPENGL | cv::WINDOW_NORMAL);
cvSetWindowProperty(name.c_str(), CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
// Create a frame at resolution
cv::Size size = cv::Size(1920, 1080);
cv::cuda::GpuMat emptyFrame;
cv::Mat frame(size, CV_8UC(3));
// Fill it in blue
cv::rectangle(frame, cv::Rect(0, 0, size.width, size.height), cv::Scalar(255, 0, 0), CV_FILLED);
emptyFrame.upload(frame);
// Size window to full resolution
cv::resizeWindow(name, size.width, size.height);
while(1)
{
// Display an empty frame
cv::imshow(name, emptyFrame);
cv::waitKey(40);
}
Этот код показывает мне рисование полноэкранных окон синим цветом, однако он остается ОДНОЙ границей пикселя на верхней и левой границах: Серая левая иверхняя граница
Кажется, что граница не является границей, как объяснено здесь: https://stackoverflow.com/a/38494752/1570628
Фактически это фон главного окна, созданного OpenCv.Копаясь в код OpenCv, он эффективно создает 2 окна внутри cvNamedWindow функция:
mainhWnd = CreateWindow( "Main HighGUI class", name, defStyle | WS_OVERLAPPED, rect.x, rect.y, rect.width, rect.height, 0, 0, hg_hinstance, 0 );
if( !mainhWnd )
CV_ERROR( CV_StsError, "Frame window can not be created" );
ShowWindow(mainhWnd, SW_SHOW);
//YV- remove one border by changing the style
hWnd = CreateWindow("HighGUI class", "", (defStyle & ~WS_SIZEBOX) | WS_CHILD, CW_USEDEFAULT, 0, rect.width, rect.height, mainhWnd, 0, hg_hinstance, 0);
if( !hWnd )
CV_ERROR( CV_StsError, "Frame window can not be created" );
Таким образом, «граница», которую мы видели, это mainhWnd (основной класс HighGUI) цвет.Тем не менее, это означает, что мое отображаемое изображение в синем смещено на один пиксель влево и вправо от экрана, поэтому я теряю 1 строку пикселя снизу и справа, потому что они выходят за пределы экрана.
Я могувижу, что это так, потому что на двойном экране я вижу правую линию переполнения пикселей на моем втором экране.Более того, если я рисую горизонтальную линию до последней строки моего изображения, она не появляется, то же самое происходит на вертикальной линии для последнего столбца моего изображения.
Для решения тестирования я попытался изменить стиль mainhWnd и hWnd непосредственно в коде OpenCv с использованием множества комбинаций флагов, также тестирование с использованием WS_POPUP, но в любом случае у меня всегда есть верхняя и левая границы.
Iтакже попытался решить здесь, но это не удаляет границу: https://stackoverflow.com/a/6512315/1570628
У кого-нибудь есть подсказка для моей проблемы?Привет.