图像处理经典算法及OpenCV程序(10)

2019-08-31 23:22

return 0; }

单通道图像的直方图

原始图:

效果图:

源代码:

#include \

#include \#include #include

int main( int argc, char** argv ) {

IplImage *src = 0;

IplImage *histimg = 0; CvHistogram *hist = 0;

int hdims = 50; // 划分HIST的个数,越高越精确 float hranges_arr[] = {0,255}; float* hranges = hranges_arr; int bin_w; float max_val; int i;

if( argc != 2 || (src=cvLoadImage(argv[1], 0)) == NULL) // force to gray image

return -1;

cvNamedWindow( \ cvNamedWindow( \

hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 ); // 计

算直方图

histimg = cvCreateImage( cvSize(320,200), 8, 3 ); cvZero( histimg );

cvCalcHist( &src, hist, 0, 0 ); // 计算直方图

cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 ); // 只找最大值 cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 ); // 缩放 bin 到区间 [0,255] cvZero( histimg );

bin_w = histimg->width / hdims; // hdims: 条的个数,则 bin_w 为条的宽度

// 画直方图

for( i = 0; i < hdims; i++ ) {

double val = ( cvGetReal1D(hist->bins,i)*histimg->height/255 ); CvScalar color = CV_RGB(255,255,0); //(hsv2rgb(i*180.f/hdims); cvRectangle( histimg, cvPoint(i*bin_w,histimg->height), cvPoint((i+1)*bin_w,(int)(histimg->height - val)), color, 1, 8, 0 ); }

cvShowImage( \

cvShowImage( \ cvWaitKey(0);

cvDestroyWindow(\

cvDestroyWindow(\ cvReleaseImage( &src );

cvReleaseImage( &histimg ); cvReleaseHist ( &hist );

return 0; }

计算和显示彩色图像的二维色调-饱和度图像

对这篇内容很郁闷,不知道以后用来干什么,声明一下,哥不是搞图像处理的。(业余爱好)

效果图:(好好的一张图,给处理成人不像人,鬼不像鬼)

#include

#include

int main( int argc, char** argv ) {

IplImage* src;

if( argc == 2 && (src=cvLoadImage(argv[1], 1))!= 0) {

IplImage* h_plane = cvCreateImage( cvGetSize(src), 8, 1 ); IplImage* s_plane = cvCreateImage( cvGetSize(src), 8, 1 ); IplImage* v_plane = cvCreateImage( cvGetSize(src), 8, 1 ); IplImage* planes[] = { h_plane, s_plane };

IplImage* hsv = cvCreateImage( cvGetSize(src), 8, 3 ); int h_bins = 30, s_bins = 32;

int hist_size[] = {h_bins, s_bins};

float h_ranges[] = { 0, 180 }; /* hue varies from 0 (~0°red) to

180 (~360°red again) */

float s_ranges[] = { 0, 255 }; /* saturation varies from 0 (black-gray-white) to 255 (pure spectrum color) */ float* ranges[] = { h_ranges, s_ranges }; int scale = 10;

IplImage* hist_img =

cvCreateImage( cvSize(h_bins*scale,s_bins*scale), 8, 3 ); CvHistogram* hist; float max_value = 0; int h, s;

cvCvtColor( src, hsv, CV_BGR2HSV );

cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );

hist = cvCreateHist( 2, hist_size, CV_HIST_ARRAY, ranges, 1 ); cvCalcHist( planes, hist, 0, 0 );

cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 ); cvZero( hist_img );

for( h = 0; h < h_bins; h++ ) {

for( s = 0; s < s_bins; s++ ) {

float bin_val = cvQueryHistValue_2D( hist, h, s ); int intensity = cvRound(bin_val*255/max_value);

cvRectangle( hist_img, cvPoint( h*scale, s*scale ), cvPoint( (h+1)*scale - 1, (s+1)*scale - 1), CV_RGB(intensity,intensity,intensity), CV_FILLED ); } }

cvNamedWindow( \ cvShowImage( \

cvNamedWindow( \

cvShowImage( \ cvWaitKey(0); } }

图像的直方图均匀化

直方图均衡化算法可以归一化图像的亮度,并增强图像的对比度 效果图:


图像处理经典算法及OpenCV程序(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:论责令限期拆除的法律性质

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: