W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在本教程中,您將學(xué)習(xí):
T0
T1
5. 在統(tǒng)計(jì)方面,基于我們使用的模型直方圖,BackProjection中存儲(chǔ)的值表示測(cè)試圖像中的像素屬于皮膚區(qū)域的概率。例如在我們的測(cè)試圖像中,較亮的區(qū)域更可能是皮膚區(qū)域(實(shí)際上是這樣),而較暗的區(qū)域的概率較低(注意這些“黑暗”區(qū)域?qū)儆诰哂幸恍╆幱暗谋砻?,反過(guò)來(lái)影響檢測(cè))。
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
Mat src; Mat hsv; Mat hue;
int bins = 25;
void Hist_and_Backproj(int, void* );
int main( int, char** argv )
{
src = imread( argv[1], IMREAD_COLOR );
if( src.empty() )
{ cout<<"Usage: ./calcBackProject_Demo1 <path_to_image>"<<endl;
return -1;
}
cvtColor( src, hsv, COLOR_BGR2HSV );
hue.create( hsv.size(), hsv.depth() );
int ch[] = { 0, 0 };
mixChannels( &hsv, 1, &hue, 1, ch, 1 );
const char* window_image = "Source image";
namedWindow( window_image, WINDOW_AUTOSIZE );
createTrackbar("* Hue bins: ", window_image, &bins, 180, Hist_and_Backproj );
Hist_and_Backproj(0, 0);
imshow( window_image, src );
waitKey(0);
return 0;
}
void Hist_and_Backproj(int, void* )
{
MatND hist;
int histSize = MAX( bins, 2 );
float hue_range[] = { 0, 180 };
const float* ranges = { hue_range };
calcHist( &hue, 1, 0, Mat(), hist, 1, &histSize, &ranges, true, false );
normalize( hist, hist, 0, 255, NORM_MINMAX, -1, Mat() );
MatND backproj;
calcBackProject( &hue, 1, 0, hist, backproj, &ranges, 1, true );
imshow( "BackProj", backproj );
int w = 400; int h = 400;
int bin_w = cvRound( (double) w / histSize );
Mat histImg = Mat::zeros( w, h, CV_8UC3 );
for( int i = 0; i < bins; i ++ )
{ rectangle( histImg, Point( i*bin_w, h ), Point( (i+1)*bin_w, h - cvRound( hist.at<float>(i)*h/255.0 ) ), Scalar( 0, 0, 255 ), -1 ); }
imshow( "Histogram", histImg );
}
Mat src; Mat hsv; Mat hue;
int bins = 25;
src = imread( argv[1], 1 );
cvtColor( src, hsv, COLOR_BGR2HSV );
hue.create(hsv.size(),hsv.depth());
int ch [] = {0,0};
mixChannels(&hsv,1,&hue,1,ch,1);
如你所見(jiàn),我們使用函數(shù)cv :: mixChannels從hsv圖像中只得到通道0(Hue)。它得到以下參數(shù):
char* window_image = "Source image";
namedWindow( window_image, WINDOW_AUTOSIZE );
createTrackbar("* Hue bins: ", window_image, &bins, 180, Hist_and_Backproj );
Hist_and_Backproj(0, 0);
imshow( window_image, src );
waitKey(0);
return 0;
void Hist_and_Backproj(int,void *)
{
MatND hist
int histSize = MAX(bin,2);
float hue_range [] = {0,180};
const float * ranges = {hue_range};
calcHist( &hue, 1, 0, Mat(), hist, 1, &histSize, &ranges, true, false );
normalize( hist, hist, 0, 255, NORM_MINMAX, -1, Mat() );
MatND backproj
calcBackProject(&hue,1,0,hist,backproj,&ranges,1,true);
所有參數(shù)都是已知的(與用于計(jì)算直方圖相同),只有我們添加了backproj矩陣,這將保存源圖像(&hue)的反投影,
imshow(“BackProj”,backproj);
int w = 400; int h = 400;
int bin_w = cvRound( (double) w / histSize );
Mat histImg = Mat::zeros( w, h, CV_8UC3 );
for( int i = 0; i < bins; i ++ )
{ rectangle( histImg, Point( i*bin_w, h ), Point( (i+1)*bin_w, h - cvRound( hist.at<float>(i)*h/255.0 ) ), Scalar( 0, 0, 255 ), -1 ); }
imshow( "Histogram", histImg );
這里是使用示例圖像的輸出(猜猜什么?另一只手)。您可以使用bin值,您將觀察它如何影響結(jié)果:
R0
R1
R2
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: