OpenCV2:幼儿园篇 第一章 创建图像并显示
生活随笔
收集整理的這篇文章主要介紹了
OpenCV2:幼儿园篇 第一章 创建图像并显示
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一.簡介
相當于在PS中,新建一個畫布
cv::Mat 類和 lplimage / cvMat結(jié)構(gòu)體都可以表示一張圖像
?
二.構(gòu)造函數(shù)創(chuàng)建圖像
// 創(chuàng)建一個空矩陣 cv::Mat image1;// 創(chuàng)建一個6行6列的8位1通道的矩陣 cv::Mat image2(6, 6, CV_8UC1);// 創(chuàng)建一個7行7列的8位3通道的矩陣 cv::Mat image3(cv::Size(7, 7), CV_8UC3); cv::Mat image4(8, 8, CV_32FC2, cv::Scalar(1, 3)); cv::Mat image4(10, 8, CV_8UC1, cv::Scalar(5));cv::Mat image5(cv::Size(9, 9), CV_8UC3, cv::Scalar(1, 2, 3));cv::Mat image6(image2);?
?
三.create()創(chuàng)建圖像
Mat m(2,2,CV_8UC3); m.create(3,2,CV_8UC2);?
?
五.單窗口顯示多張圖像
cv::resize()? //圖像縮放
cv::showManyImages()? //顯示多張圖像
?
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>using namespace cv;void showManyImages(const std::vector<cv::Mat>& srcImages, cv::Size imgSize) {int nNumImages = srcImages.size();cv::Size nSizeWindows;if(nNumImages > 12){std::cout << "Not more than 12 images!" << std::endl;return ;}// 根據(jù)圖片序列數(shù)量來確定分割小窗口形態(tài)switch(nNumImages){case 1: nSizeWindows = cv::Size(1,1);break;case 2: nSizeWindows = cv::Size(2,1);break;case 3:case 4: nSizeWindows = cv::Size(2,2);break;case 5: case 6: nSizeWindows = cv::Size(3,2);break;case 7:case 8: nSizeWindows = cv::Size(4,2);break;case 9: nSizeWindows = cv::Size(3,3);break;default: nSizeWindows = cv::Size(4,3);break;}// 設(shè)置小圖像尺寸 間隙 邊界int nShowImageSize = 200;int nSplitLineSize = 15;int nAroundLineSize = 50;// 創(chuàng)建輸出圖像 圖像大小根據(jù)輸入源確定const int imagesHeight = nShowImageSize * nSizeWindows.width + nAroundLineSize + (nSizeWindows.width - 1) * nSplitLineSize;const int imagesWidth = nShowImageSize * nSizeWindows.height + nAroundLineSize + (nSizeWindows.height - 1) * nSplitLineSize;std::cout << imagesWidth << " " << imagesHeight <<std::endl;cv::Mat showWindowImages(imagesWidth, imagesHeight, CV_8UC3, cv::Scalar(0, 0, 0));//提取對應(yīng)小圖像的左上角坐標X Yint posX = (showWindowImages.cols - (nShowImageSize * nSizeWindows.width + (nSizeWindows.width - 1) * nSplitLineSize))/2;int posY = (showWindowImages.rows - (nShowImageSize * nSizeWindows.height + (nSizeWindows.height - 1) * nSplitLineSize)) / 2;std::cout << posX << " " << posY << std::endl;int tempPosX = posX;int tempPosY = posY;// 將每一小幅圖像整合成大圖像for (int i = 0; i < nNumImages; i++){// 小圖像坐標轉(zhuǎn)換if((i % nSizeWindows.width == 0) && (tempPosX != posX)){tempPosX = posX;tempPosY += (nSplitLineSize + nShowImageSize);}// 利用Rect區(qū)域?qū)⑿D像置于大圖像相應(yīng)區(qū)域cv::Mat tempImage = showWindowImages(cv::Rect(tempPosX, tempPosY, nShowImageSize, nShowImageSize));//利用resize函數(shù)實現(xiàn)圖像縮放resize(srcImages[i], tempImage, cv::Size(nShowImageSize, nShowImageSize));tempPosX += (nSplitLineSize + nShowImageSize);}cv::imshow("showWindowImages", showWindowImages); }int main() {// 圖像源輸入std::vector<cv::Mat> srcImages(9);srcImages[0] = cv::imread("a.jpg");srcImages[1] = cv::imread("a.jpg");srcImages[2] = cv::imread("a.jpg");srcImages[3] = cv::imread("a.jpg");srcImages[4] = cv::imread("a.jpg");srcImages[5] = cv::imread("a.jpg");srcImages[6] = cv::imread("a.jpg");srcImages[7] = cv::imread("a.jpg");srcImages[8] = cv::imread("a.jpg");// 判斷當前vector讀入的正確性for (int i = 0; i < srcImages.size(); i++){if (!srcImages[i].data){std::cout << "read error!" << std::endl;return -1;}}//調(diào)用單窗口顯示圖像showManyImages(srcImages, cv::Size(512, 400));cv::waitKey(0);return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/k5bg/p/11076766.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的OpenCV2:幼儿园篇 第一章 创建图像并显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: buaaoo_fourth_assign
- 下一篇: linux 跨IP拷贝命令 scp