① opencv創建圖片為什麼我會有一個灰色
關於路徑有一點需要說明的是,在C和C++裡面,輸出字元串時,如果想輸出一個換行,那就要加上'\n'這個標志,類似的,輸出一個TAB,就加上'\t',也就是說,反斜杠("\")這個符號會把跟在它後面的字元結合起來轉義成其它字元。根據這個原理,如果想輸出雙引號('"'),就需要輸入'\"',這樣才會將包含了雙引號的字元串正確的寫入內存中。那麼如果想輸入一個反斜杠呢?很簡單,只要敲'\\'就可以了。(關於為什麼斜杠和反斜杠都可以的用來表示路徑,可以點 這里為什麼Windows 系統中用反斜杠表示路徑,而C語言教材中都是用斜杠表示頭文件的路徑?)
要讀取圖像的存放路徑有如下兩種情況:
a. 存放在項目的根目錄下
拿VS來說,就是如下的項目的根目錄下(注意是項目的根目錄,也就是選中解決方案後的地址,比如解決方案「test1」的路徑是.../opencv/test1/test1.sln,那麼就把圖片保存到.../opencv/test1/test1這個路徑下),對於這種情況,可以直接用相對路徑去讀取圖像,因為程序默認的是從項目根目錄下去尋找目標。
可以通過如下方式訪問:
const char* imagename = "Lena.jpg";//項目根目錄下存放Lena.jpg圖片
或者在debug文件夾同級目錄下建立一個文件夾專門用來存放圖片,通過如下代碼訪問:
const char* imagename = "Opencv Picture\\Lena.jpg";//或者const char* imagename = "Opencv Picture/Lena.jpg";
此外,也可以將圖片放在和生成的可執行文件(.exe)同級的目錄下,直接通過"Lena.jpg",運行.exe來訪問圖片。
b. 存放在項目以外的地方
這種情況下需要通過絕對地址來進行訪問,如下在D盤中建有Opencv Picture的文件夾,將圖片存放其中,可以通過如下方式訪問
const char* imagename = "D:\\Opencv Picture\\Lena.jpg";//或者const char* imagename = "D:/Opencv Picture/Lena.jpg";
② 如何從入門開始學習OpenCV
方法如下:
先去下載最新版OpenCV,網址如下:http://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-win/2.4.3/OpenCV-2.4.3.exe。下載完成後解壓到相應目錄。本人解壓到D:Program FilesOpenCV2.4.3。
有的文章提到使用CMake把OpenCV下面的範例生成為Visual Studio的工程,此處我沒有這樣做。直接使用範例。這里先把OpenCV目錄下面的幾個重要目錄做個說明:
doc目錄:主要包含OpenCV的幫助文檔。其中opencv2refman.pdf主要是OpenCV的各種類和函數的使用說明。
opencv_tutorials.pdf,主要是下面教學代碼目錄裡面各個教學範例的簡單講解。
opencv_cheatsheet.pdf主要是最常用OpenCV類和函數的集合。此3個PDF文檔對自學者幫助最大。
samplescpp utorial_code目錄:裡麵包含基本教學代碼。和上面的opencv_tutorials.pdf文檔遙相呼應,構成一個完整的自學體系。
build目錄:包含編譯,調試,發布所需要的各類動態庫,靜態庫,頭文件等。因為OpenCV2.4.3好像只支持Visual Studio 2008以上版本,我在這里以Visual Studio 2008為例講解如何讓範例跑起來。
添加環境變數:此處我在path環境變數中添加如下目錄:D:Program FilesOpenCV2.4.3uildx86vc9in。記住在前面一個目錄後面加分號。
在Visual Studio中包含頭文件目錄:見附件中的圖片,已經用紅色矩形框標識如何操作。
在Visual Studio中包含庫文件目錄:見附件中的圖片,已經用紅色矩形框標識如何操作。4
建立一個新建Visual Studio VC win32控制台應用工程,這里我選擇帶預編譯頭的工程,省去添加cpp文件的工作。
代碼創建:這里我選擇samplescpp utorial_codeImgProcMorphology_2.cpp文件。先添加包含目錄,如下(以後所有範例均可以如下添加):#include <opencv2/opencv.hpp>#include <stdio.h>然後復制代碼。
編譯文件:自然少不了要包含靜態庫,要添加的庫(debug版和release差別就是文件名後多了一個d標識是debug版)如下:
debug版:
opencv_calib3d243d.lib
opencv_contrib243d.lib
opencv_core243d.lib
opencv_features2d243d.lib
opencv_flann243d.lib
opencv_gpu243d.lib
opencv_haartraining_engined.lib
ibrelease版:
opencv_calib3d243.lib
opencv_contrib243.lib
opencv_core243.lib
opencv_features2d243.lib
opencv_flann243.lib
opencv_gpu243.lib
字元集設置:如果編譯過程中出現如下錯誤:不能將參數 1 從「_TCHAR *」轉換為「const std::string &」原因如下: 無法從「_TCHAR *」轉換為「const std::string」。請字元集設置為「使用多位元組字元集」。
最後指定命令後參數:方法見附件。這樣就可以不用在windows命令行下輸入參數了,方便調試,但是要注意,圖片必須放在你所建立的工程目錄下(和.cpp以及.h文件同一目錄)。否則就要加上相應的路徑。如果參數多於1個,請以空格分開。
支持所有參數設置完成,開始編譯運行吧。如果Visual Studio無問題的話,按照以上按部就班操作,每個範例均可以正常運行。
③ 如何使用opencv製作全景照片
①:首先打開ptgui 軟體,打開「載入圖像功能」,選擇並導入圖片,或者將需要處理的一組圖片全選直接拖到軟體操作界面:
④ 如何利用opencv進行樣本訓練
OpenCV訓練分類器
一、簡介
目標檢測方法最初由Paul Viola [Viola01]提出,並由Rainer Lienhart [Lienhart02]對這一方法進行了改善。
該方法的基本步驟為:
首先,利用樣本(大約幾百幅樣本圖片)的 harr 特徵進行分類器訓練,得到一個級聯的boosted分類器。
分類器中的"級聯"是指最終的分類器是由幾個簡單分類器級聯組成。在圖像檢測中,被檢窗口依次通過每一級分類器, 這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每一級分類器檢測的區域即為目標區域。
分類器訓練完以後,就可以應用於輸入圖像中的感興趣區域(與訓練樣本相同的尺寸)的檢測。檢測到目標區域(汽車或人臉)分類器輸出為1,否則輸出為0。為了檢測整副圖像,可以在圖像中移動搜索窗口,檢測每一個位置來確定可能的目標。為了搜索不同大小的目標物體,分類器被設計為可以進行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。所以,為了在圖像中檢測未知大小的目標物體,掃描程序通常需要用不同比例大小的搜索窗口對圖片進行幾次掃描。
目前支持這種分類器的boosting技術有四種:
Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。
"boosted" 即指級聯分類器的每一層都可以從中選取一個boosting演算法(權重投票),並利用基礎分類器的自我訓練得到。
根據上面的分析,目標檢測分為三個步驟:
1、 樣本的創建
2、 訓練分類器
3、 利用訓練好的分類器進行目標檢測。
二、樣本創建
訓練樣本分為正例樣本和反例樣本,其中正例樣本是指待檢目標樣本(例如人臉或汽車等),反例樣本指其它任意圖片,所有的樣本圖片都被歸一化為同樣的尺寸大小(例如,20x20)。
負樣本
負樣本可以來自於任意的圖片,但這些圖片不能包含目標特徵。負樣本由背景描述文件來描述。背景描述文件是一個文本文件,每一行包含了一個負樣本圖片的文件名(基於描述文件的相對路徑)。該文件必須手工創建。
e.g: 負樣本描述文件的一個例子:
假定目錄結構如下:
/img
img1.jpg
img2.jpg
bg.txt
則背景描述文件bg.txt的內容為:
img/img1.jpg
img/img2.jpg
正樣本
正樣本由程序craatesample程序來創建。該程序的源代碼由OpenCV給出,並且在bin目錄下包含了這個可執行的程序。
正樣本可以由單個的目標圖片或者一系列的事先標記好的圖片來創建。
Createsamples程序的命令行參數:
命令行參數:
-vec <vec_file_name>
訓練好的正樣本的輸出文件名。
-img<image_file_name>
源目標圖片(例如:一個公司圖標)
-bg<background_file_name>
背景描述文件。
-num<number_of_samples>
要產生的正樣本的數量,和正樣本圖片數目相同。
-bgcolor<background_color>
背景色(假定當前圖片為灰度圖)。背景色制定了透明色。對於壓縮圖片,顏色方差量由bgthresh參數來指定。則在bgcolor-bgthresh和bgcolor+bgthresh中間的像素被認為是透明的。
-bgthresh<background_color_threshold>
-inv
如果指定,顏色會反色
-randinv
如果指定,顏色會任意反色
-maxidev<max_intensity_deviation>
背景色最大的偏離度。
-maxangel<max_x_rotation_angle>
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>
最大旋轉角度,以弧度為單位。
-show
如果指定,每個樣本會被顯示出來,按下"esc"會關閉這一開關,即不顯示樣本圖片,而創建過程繼續。這是個有用的debug選項。
-w<sample_width>
輸出樣本的寬度(以像素為單位)
-h《sample_height》
輸出樣本的高度,以像素為單位。
註:正樣本也可以從一個預先標記好的圖像集合中獲取。這個集合由一個文本文件來描述,類似於背景描述文件。每一個文本行對應一個圖片。每行的第一個元素是圖片文件名,第二個元素是對象實體的個數。後面緊跟著的是與之匹配的矩形框(x, y, 寬度,高度)。
⑤ opencv 如何在一個窗口裡面插入多張圖片
不是很明白題目的意思,是一個窗口顯示多張圖么?可以先開辟一個大的圖像(大小是所有小圖的和),然後根據你要顯示的圖像大小和位置分別設置ROI,把小圖進去。最後釋放ROI把大圖顯示出來
⑥ python。PIL創建一個圖片如何用opencv編輯
先用PIL的介面保存成圖像文件(比如xxx.bmp),然後再用opencv的介面打開。
⑦ 在opencv中,cvcreateimage和cvloadimage這兩個函數有什麼區別
cvcreateimage是創建了一個原來沒有的圖像指針IplImage,IplImage里的圖像寬高和像素,通道等都要你自己去設置。
cvloadimage是讀取圖像,並把圖像的相關信息放入IplImage里,其IplImage里圖像寬高和像素,通道,位深等信息已經存在,你可以讀取並用來計算。
⑧ 【opencv】關於用cvPyrDown()創建一幅寬度和高度為輸入圖像一半尺寸的圖像的問題
你的程序寫的有問題,你的dopyrdown函數採用函數返回值的方式輸出采樣後的圖像。可是在你調用的時候是直接調用dopyrdown函數的,並沒有ipimage指針去接收這個函數的返回值啊!也就是說縮小圖像的操作做完了,但是程序中沒有數據結構去接收這個結果。你在輸出output圖像的時候也是直接使用img圖像的。
⑨ 已知圖像各個像素點的RGB值如何生成圖像,最好是使用OpenCV
用mat的話直接imshow就行了以下為偽代碼:
#include<iostream>
#include<stack>
#include"opencv2/opencv.hpp"
usingnamespacestd;
usingnamespacecv;
Matim(600,800,CV_8UC3,Scalar(255,255,255));//3個255為顏色的三通道BGR
im.ptr<uchar>(x)[y*3]=color;//x,y為點的坐標,color為你給定的顏色B
im.ptr<uchar>(x)[y*3+1]=color;//x,y為點的坐標,color為你給定的顏色G
im.ptr<uchar>(x)[y*3+2]=color;//x,y為點的坐標,color為你給定的顏色R
imshow("grayim",grayim);//生成圖片
⑩ 用OpenCV怎樣創建一個純顏色的圖像
Mat(rows,cols,type,cv::scalar(B,G,R)給定不同數值,顏色不同。)