2
我對令人困惑的標題感到抱歉。基本上我想使用鼠標光標在應用色彩映射之前顯示圖像的像素值。可能嗎?我知道怎麼弄的(X,Y)從here 這裏的座標是我的代碼:Opencv C++:在應用色彩地圖之前使用圖像的光標顯示像素值
cv::Mat falseColorsMap;
void onMouse(int event, int x, int y, int, void*);
void showImage(cv::Mat frameMat){
double min;
double max;
cv::minMaxLoc(frameMat, &min, &max);
std::cout << min << "," << max << "\n";
cv::Mat adjMap;
frameMat.convertTo(adjMap,CV_8UC1, 255/(max-min), -min); // expand your range to 0..255. Similar to histEq();
applyColorMap(adjMap, falseColorsMap, cv::COLORMAP_JET);
namedWindow("Out", CV_WINDOW_NORMAL);// Create a window for display.
resizeWindow("Out", 800, 600);
setMouseCallback("Out", onMouse, 0);
cv::imshow("Out", falseColorsMap);
waitKey(0);
}
// Function onMouse displays cursor values
void onMouse(int event, int x, int y, int, void*)
{
if (event != CV_EVENT_LBUTTONDOWN)
return;
Point pt = Point(x,y);
std::cout<<"("<<pt.x<<", "<<pt.y<<") ...... "<<(falseColorsMap.at<int>(y,x)) << '\n';
}
使用鼠標光標時如何獲得frameMat的像素值?謝謝你的幫助!
非常感謝MD。 Nazmul Kibria爲您提供幫助。它解決了我的問題!你能解釋一下onMouse如何攜帶矩陣framesMap而不是framesMat本身? (如果我們省略framesMap = frameMat.clone();命令)。 – Sofia
謝謝。 framesMap和frameMat都相同。但區別在於全球範圍內和其他地區範圍內。全局範圍變量對其他函數是已知的,這就是爲什麼onMouse函數可以訪問它。是的,您可以省略克隆命令,在這種情況下,您已經將framsMat作爲onMouse函數的參數傳遞。 –