当前位置:首页 » 编程语言 » pythonopencv直方图

pythonopencv直方图

发布时间: 2022-04-16 08:51:49

python opencv怎么对彩图进行直方图均衡化

在某些情况下,一副图像中大部分像素的强度都集中在某一区域,而质量较高的图像中,像素的强度应该均衡的分布。为此,可将表示像素强度的直方图进行拉伸,将其平坦化

② opencv的直方图问题

可以生成 矩阵的直方图。
用法跟图片一样。

应为图片在OpenCV中,就是使用矩阵来存储的。

在OpenCV2.l 之后,已经彻底的从IplImage变成了 Mat 矩阵对象。

以下是使用 图片生成直方图的例子。
把imread函数的地方改成 对函数
//使用 OpenCV 2.1
#include <cv.h>
#include <highgui.h>

using namespace cv;

int main( int argc, char** argv )
{
Mat hsv;

// 初始化

在此处加入代码, 初始化 hsv对象。
// 初始化

// let's quantize the hue to 30 levels
// and the saturation to 32 levels
int hbins = 30, sbins = 32;
int histSize[] = {hbins, sbins};
// hue varies from 0 to 179, see cvtColor
float hranges[] = { 0, 180 };
// saturation varies from 0 (black-gray-white) to
// 255 (pure spectrum color)
float sranges[] = { 0, 256 };
const float* ranges[] = { hranges, sranges };
MatND hist;
// we compute the histogram from the 0-th and 1-st channels
int channels[] = {0, 1};

calcHist( &hsv, 1, channels, Mat(), // do not use mask
hist, 2, histSize, ranges,
true, // the histogram is uniform
false );
double maxVal=0;
minMaxLoc(hist, 0, &maxVal, 0, 0);

int scale = 10;
Mat histImg = Mat::zeros(sbins*scale, hbins*10, CV_8UC3);

for( int h = 0; h < hbins; h++ )
for( int s = 0; s < sbins; s++ )
{
float binVal = hist.at<float>(h, s);
int intensity = cvRound(binVal*255/maxValue);
cvRectangle( histImg, Point(h*scale, s*scale),
Point( (h+1)*scale - 1, (s+1)*scale - 1),
Scalar::all(intensity),
CV_FILLED );
}

namedWindow( "Source", 1 );
imshow( "Source", src );

namedWindow( "H-S Histogram", 1 );
imshow( "H-S Histogram", histImg );

waitKey();
}

③ 怎么用python opencv连线画图

import cv2
import numpy as np

img_size = (210,210)
image = np.ones(img_size) * 255

x1 = 10
y1 =10
x2 = 200
y2 = 200

lineThickness = 2
cv2.line(image, (x1, y1), (x1, y2), (0,255,0), lineThickness)
cv2.line(image, (x1, y1), (x2, y1), (0,255,0), lineThickness)
cv2.line(image, (x1, y2), (x2, y2), (0,255,0), lineThickness)
cv2.line(image, (x2, y1), (x2, y2), (0,255,0), lineThickness)

cv2.imshow('oo',image)
cv2.waitKey()

④ python opencv 怎么利用csv文件训练人脸识别模型代码

1.1.介绍Introction
从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的opencv\moles\contrib\doc\facerec\src下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂)

目前支持的算法有
Eigenfaces特征脸createEigenFaceRecognizer()
Fisherfaces createFisherFaceRecognizer()
LocalBinary Patterns Histograms局部二值直方图 createLBPHFaceRecognizer()
下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。

1.2.人脸识别Face Recognition
对人类来说,人脸识别很容易。文献[Tu06]告诉我们,仅仅是才三天的婴儿已经可以区分周围熟悉的人脸了。那么对于计算机来说,到底有多难?其实,迄今为止,我们对于人类自己为何可以区分不同的人所知甚少。是人脸内部特征(眼睛、鼻子、嘴巴)还是外部特征(头型、发际线)对于人类识别更有效?我们怎么分析一张图像,大脑是如何对它编码的?David Hubel和TorstenWiesel向我们展示,我们的大脑针对不同的场景,如线、边、角或者运动这些局部特征有专门的神经细胞作出反应。显然我们没有把世界看成零散的块块,我们的视觉皮层必须以某种方式把不同的信息来源转化成有用的模式。自动人脸识别就是如何从一幅图像中提取有意义的特征,把它们放入一种有用的表示方式,然后对他们进行一些分类。基于几何特征的人脸的人脸识别可能是最直观的方法来识别人脸。第一个自动人脸识别系统在[Kanade73]中又描述:标记点(眼睛、耳朵、鼻子等的位置)用来构造一个特征向量(点与点之间的距离、角度等)。通过计算测试和训练图像的特征向量的欧氏距离来进行识别。这样的方法对于光照变化很稳健,但也有巨大的缺点:标记点的确定是很复杂的,即使是使用最先进的算法。一些几何特征人脸识别近期工作在文献[Bru92]中有描述。一个22维的特征向量被用在一个大数据库上,单靠几何特征不能提供足够的信息用于人脸识别。

特征脸方法在文献[TP91]中有描述,他描述了一个全面的方法来识别人脸:面部图像是一个点,这个点是从高维图像空间找到它在低维空间的表示,这样分类变得很简单。低维子空间低维是使用主元分析(Principal Component Analysis,PCA)找到的,它可以找拥有最大方差的那个轴。虽然这样的转换是从最佳重建角度考虑的,但是他没有把标签问题考虑进去。[gm:读懂这段需要一些机器学习知识]。想象一个情况,如果变化是基于外部来源,比如光照。轴的最大方差不一定包含任何有鉴别性的信息,因此此时的分类是不可能的。因此,一个使用线性鉴别(Linear Discriminant Analysis,LDA)的特定类投影方法被提出来解决人脸识别问题[BHK97]。其中一个基本的想法就是,使类内方差最小的同时,使类外方差最大。
近年来,各种局部特征提取方法出现。为了避免输入的图像的高维数据,仅仅使用的局部特征描述图像的方法被提出,提取的特征(很有希望的)对于局部遮挡、光照变化、小样本等情况更强健。有关局部特征提取的方法有盖伯小波(Gabor Waelets)([Wiskott97]),离散傅立叶变换(DiscreteCosinus Transform,DCT)([Messer06]),局部二值模式(LocalBinary Patterns,LBP)([AHP04])。使用什么方法来提取时域空间的局部特征依旧是一个开放性的研究问题,因为空间信息是潜在有用的信息。
1.3.人脸库Face Database
我们先获取一些数据来进行实验吧。我不想在这里做一个幼稚的例子。我们在研究人脸识别,所以我们需要一个真的人脸图像!你可以自己创建自己的数据集,也可以从这里(http://face-rec.org/databases/)下载一个。
AT&TFacedatabase又称ORL人脸数据库,40个人,每人10张照片。照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集。所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有有轻微旋转)。

⑤ Python和opencv怎么用,求用图解释

opencv显示图像要把图像放在工程文件的debug 目录里; OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。

⑥ python图像处理opencv cv.createimage怎么用

Python:cv.CreateImage(size, depth, channels)

size– Image width and height

depth– Bit depth of image elements

channels– Number of channels per pixel

上面是opencv官方的文档,三个参数:

  1. 新建图像的长宽尺寸,像素数如:1920*1080

  2. 像素的位深,能够描述图像的色彩数量,一般是8位或者16位深,IPL_DEPTH_8U 或者IPL_DEPTH_16U

  3. 单像素的通道数量,opencv支持1~4通道,1通道就是黑白图,由位深描述由黑到白的程度。3通道就是常规的RGB通道了

⑦ 使用opencv对直方图可以做哪些处理

颜色直方图特别适于描述那些难以进行自动分割的图像。

⑧ opencv python 怎么建立直方图

Windows环境下把opencv中python的py文件复制到python安装位置的package 里。linux下载opencv-python

⑨ 如何利用opencv创建空间直方图

//rgb直方图
void CalcHistRgb()
{
IplImage* img_source;

if (img_source = cvLoadImage("../data/1.bmp",1))
{
IplImage* RedChannel = cvCreateImage( cvGetSize(img_source), 8, 1);
IplImage* GreenChannel = cvCreateImage( cvGetSize(img_source), 8, 1);
IplImage* BlueChannel = cvCreateImage( cvGetSize(img_source), 8, 1);
IplImage* alphaChannel = cvCreateImage( cvGetSize(img_source), 8, 1);
IplImage* gray_plane = cvCreateImage(cvGetSize(img_source),8,1);

//分割为单通道图像
cvCvtPixToPlane(img_source,BlueChannel,GreenChannel,RedChannel,0);
// 显示图像
cvNamedWindow( "RedChannel", 1 );
cvNamedWindow( "GreenChannel", 1 );
cvNamedWindow( "BlueChannel", 1 );
cvNamedWindow( "lphaChannel", 1 );

cvShowImage( "RedChannel", RedChannel );
cvShowImage( "GreenChannel", GreenChannel );
cvShowImage( "BlueChannel", BlueChannel );
cvShowImage( "lphaChannel", alphaChannel );

cvCvtColor(img_source,gray_plane,CV_BGR2GRAY);
cvNamedWindow("GrayPlane",1);
cvShowImage("GrayPlane",gray_plane);
//OpenCV中不管是Windows中Load的还是摄像头取得的都是BGR顺序排列的

//然后为这四幅图创建对应的直方图结构。
int hist_size = 200;

int hist_height = 200;

float range[] = {0,255};

float* ranges[]={range};

CvHistogram* r_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);

CvHistogram* g_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);

CvHistogram* b_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);

CvHistogram* gray_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);

//接下来计算直方图,创建用于显示直方图的图像,略去了一部分重复代码,以下也是

cvCalcHist(&RedChannel,r_hist,0,0);
cvCalcHist(&GreenChannel,g_hist,0,0);
cvCalcHist(&BlueChannel,b_hist,0,0);
cvCalcHist(&gray_plane,gray_hist,0,0);
cvNormalizeHist(gray_hist,1.0);
cvNormalizeHist(r_hist,1.0);
cvNormalizeHist(g_hist,1.0);
cvNormalizeHist(b_hist,1.0);

int scale = 2;

IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale,hist_height*4),8,3);

cvZero(hist_image);

//然后开始显示,这里对直方图进行了标准化处理,不然的话无法观察到明显的变化。

float r_max_value = 0;
float g_max_value = 0;
float b_max_value = 0;
float gray_max_value = 0;
cvGetMinMaxHistValue(r_hist, 0,&r_max_value,0,0);
cvGetMinMaxHistValue(g_hist, 0,&g_max_value,0,0);
cvGetMinMaxHistValue(b_hist, 0,&b_max_value,0,0);
cvGetMinMaxHistValue(b_hist, 0,&gray_max_value,0,0);
for(int i=0;i<hist_size;i++)
{

float r_bin_val = cvQueryHistValue_1D(r_hist,i);

int r_intensity = cvRound(r_bin_val*hist_height/r_max_value);
cvRectangle(
hist_image,
cvPoint(i*scale,hist_height-1),
cvPoint((i+1)*scale - 1, hist_height - r_intensity),
CV_RGB(255,0,0));

float g_bin_val=cvQueryHistValue_1D(g_hist,i);
int g_intensity = cvRound(g_bin_val*hist_height/g_max_value);
cvRectangle(
hist_image,
cvPoint(i*scale,2*hist_height-1),
cvPoint((i+1)*scale - 1, 2*hist_height - g_intensity),
CV_RGB(0,255,0));

float b_bin_val = cvQueryHistValue_1D(b_hist,i);
int b_intensity = cvRound(b_bin_val*hist_height/b_max_value);
cvRectangle(
hist_image,
cvPoint(i*scale,3*hist_height-1),
cvPoint((i+1)*scale - 1, 3*hist_height - b_intensity),
CV_RGB(0,0,255));

float gray_bin_val = cvQueryHistValue_1D(gray_hist,i);
int gray_intensity = cvRound(gray_bin_val*hist_height/gray_max_value);
cvRectangle(
hist_image,
cvPoint(i*scale,4*hist_height-1),
cvPoint((i+1)*scale - 1, 4*hist_height - gray_intensity),
CV_RGB(100,100,100));

}
cvNamedWindow( "Source", 1 );
cvShowImage( "Source", img_source );

cvNamedWindow( "RGB_Histogram", 1 );
cvShowImage( "RGB_Histogram", hist_image );

}

}

⑩ opencv对图像的颜色识别问题,要用python2实现

我没用过Python的Opencv的库,只是用过Python的Image的库;Image库已经可以结果这个问题了

我试着做一下:你先得安装PIL库

得到rgb三个通道,然后转到HSV通道,其中H表示0-255的颜色,V表示强度,你大概先知道紫色的范围是多少

fromPILimportImage
importcolorsys
defCalculateH(img):
iflen(img.getbands())==4:
ir,ig,ib,ia=img.split()
else:
ir,ig,ib=img.split()

Hdat=[]
Sdat=[]
Vdat=[]

forrd,gn,blinzip(ir.getdata(),ig.getdata(),ib.getdata()):
h,l,s=colorsys.rgb_to_hsv(rd/255.,gn/255.,bl/255.)
Hdat.append(h)
Sdat.append(l)
Vdat.append(s)
meanV=mean(Vdat)
returnHdat,meanV

defmyreadim(filename):
im=Image.open(filename)
H,V=CalculateH(im)
后面我就懒得写了,应该思路都清楚了吧,要转到其他的颜色通道上,不要在rgb通道上
热点内容
h3c如何查看所有配置 发布:2024-05-04 05:26:39 浏览:491
java统计字符串中字母个数 发布:2024-05-04 05:22:58 浏览:886
throwablejava 发布:2024-05-04 05:22:56 浏览:790
IP和服务器可以分开架设吗 发布:2024-05-04 05:17:48 浏览:26
ip提取源码 发布:2024-05-04 05:01:42 浏览:762
驾校报名了密码是什么 发布:2024-05-04 04:49:02 浏览:610
安卓加密的rar软件 发布:2024-05-04 04:18:30 浏览:606
聚会编程题 发布:2024-05-04 04:02:41 浏览:405
我的世界服务器自动扫地 发布:2024-05-04 03:48:41 浏览:612
4500能配什么电脑配置 发布:2024-05-04 03:22:29 浏览:592