我試過不同的方式使它工作,但不幸的是,這似乎不可能使用OpenCV。你可以做的唯一事情就是可以在主(主)屏幕上顯示一個窗口,只需使用當前代碼並手動處理第二個窗口 - 設置窗口位置,調整圖像大小,然後使用imshow
函數來顯示它。下面是一些例子:
void showWindowAlmostFullscreen(cv::Mat img, std::string windowTitle, cv::Size screenSize, cv::Point screenZeroPoint)
{
screenSize -= cv::Size(100, 100); //leave some place for window title bar etc
double xScallingFactor = (float)screenSize.width/(float)img.size().width;
double yScallingFactor = (float)screenSize.height/(float)img.size().height;
double minFactor = std::min(xScallingFactor, yScallingFactor);
cv::Mat temp;
cv::resize(img, temp, cv::Size(), minFactor, minFactor);
cv::moveWindow(windowTitle, screenZeroPoint.x, screenZeroPoint.y);
cv::imshow(windowTitle, temp);
}
int _tmain(int argc, _TCHAR* argv[])
{
cv::Mat img1 = cv::imread("D:\\temp\\test.png");
cv::Mat img2;
cv::bitwise_not(img1, img2);
cv::namedWindow("img1", CV_WINDOW_AUTOSIZE);
cv::setWindowProperty("img1", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
cv::namedWindow("img2");
while(cv::waitKey(1) != 'q')
{
cv::imshow("img1", img1);
cv::setWindowProperty("img1", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
showWindowAlmostFullscreen(img2, "img2", cv::Size(1366, 768), cv::Point(260, 1080));
}
}
和結果:
屏幕尺寸和屏幕零點(我不知道這是否是這個點的正確名稱 - 通常它只是一個點其中有屏幕(0,0)點),您可以使用其他庫或從Windows控制面板獲得。當您開始移動屏幕時,屏幕零點將會顯示:
在啓用全屏前設置X/Y不起作用?也許openCV GUI對你的需求太有限了(它並不意味着被用於最終用戶的質量,也許切換到一些真正的GUI庫) – Micka