在Matlab中,可能會顯示兩個圖像重疊,這對於顯示兩個圖像如何相互對齊非常有用。在openCV中顯示兩個彼此重疊的圖像
例如看看下面的代碼:
img1 = zeros(100,100);
img1(20:50, 10:40) = 255;
img2 = zeros(100, 100);
img2(35:65, 35:65) = 255;
imshowpair(img1, img2);
它創建如下圖:
是否有任何內置函數或OpenCV庫沒有辦法做這樣(在C++)?
在Matlab中,可能會顯示兩個圖像重疊,這對於顯示兩個圖像如何相互對齊非常有用。在openCV中顯示兩個彼此重疊的圖像
例如看看下面的代碼:
img1 = zeros(100,100);
img1(20:50, 10:40) = 255;
img2 = zeros(100, 100);
img2(35:65, 35:65) = 255;
imshowpair(img1, img2);
它創建如下圖:
是否有任何內置函數或OpenCV庫沒有辦法做這樣(在C++)?
你想用addWeighted
如記錄here
Mat img1 = Mat(100,100,CV_8UC3,Scalar::all(0));
Mat img2 = Mat(100,100,CV_8UC3,Scalar::all(0));
rectangle(img1, Rect(20,10,50,40), Scalar(0,255,0), -1);
rectangle(img2, Rect(35,35,65,65), Scalar(255,0,255), -1);
Mat result;
addWeighted(img1, 0.5, img2, 0.5, 0.0, result);
imshow("SO question", result);
waitKey(10);
我沒有使用過,所以我不知道的全方位它做什麼,但在這種情況下,它看起來像它只是服用第一圖像作爲綠色通道和藍色和紅色通道中的第二圖像:
cv::Mat img1 = cv::Mat::zeros(100, 100, CV_8U);
rectangle(img1, cv::Rect(10,20,30,30), 255, CV_FILLED);
cv::Mat img2 = cv::Mat::zeros(100, 100, CV_8U);
rectangle(img2, cv::Rect(35,35,30,30), 255, CV_FILLED);
std::vector<cv::Mat> channels;
cv::Mat imgPair;
channels.push_back(img2);
channels.push_back(img1);
channels.push_back(img2);
merge(channels, imgPair);
imshow("imgPair", imgPair);
cv::waitKey(0);
輸出:
這是工作,當你想只在調試模式下使用OpenCV庫中的代碼:
void showImagePairs(const cv::Mat &img1, const cv::Mat &img2) {
std::vector<cv::Mat> channels;
cv::Mat imgPair;
channels.push_back(img2);
channels.push_back(img1);
channels.push_back(img2);
cv::merge(&channels[0], channels.size(), imgPair);
cv::imshow("imgPair", imgPair);
int c = cvWaitKey(40);
}
這可能會幫助:http://docs.opencv.org/2.4/doc/tutorials/核心/ adding_images/adding_images.html –