我一直在实施Viola-Jones的人脸检测算法.该技术依赖于在图像内放置24×24像素的子帧,并且随后在每个位置中将矩形特征放置在每个位置中,并且每种尺寸都可能.
这些特征可以包括两个,三个或四个矩形.提供以下示例.

他们声称详尽的集合超过180k(第2部分):
鉴于探测器的基本分辨率为24x24,详尽的矩形特征集非常大,超过180,000.请注意,与Haar基础不同,矩形特征集是过度完整的.
本文未明确说明以下陈述,因此它们是我的假设:
基于这些假设,我计算了详尽的集合:
const int frameSize = 24;
const int features = 5;
// All five feature types:
const int feature[features][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}};
int count = 0;
// Each feature:
for (int i = 0; i < features; i++) {
int sizeX = feature[i][0];
int sizeY = feature[i][1];
// Each position:
for (int x = 0; x <= …Run Code Online (Sandbox Code Playgroud) algorithm image-processing computer-vision face-detection viola-jones
我正在尝试调整图像大小,同时保留原始图像的宽高比,这样新图像看起来不会被压扁.
例如:
将150*100图像转换为150*150图像.
高度的额外50个像素需要用白色背景颜色填充.
这是我正在使用的当前代码.
它适用于调整大小,但更改原始图像的宽高比会压缩新图像.
private void resizeImage(string path, string originalFilename,
int width, int height)
{
Image image = Image.FromFile(path + originalFilename);
System.Drawing.Image thumbnail = new Bitmap(width, height);
System.Drawing.Graphics graphic =
System.Drawing.Graphics.FromImage(thumbnail);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(image, 0, 0, width, height);
System.Drawing.Imaging.ImageCodecInfo[] info =
ImageCodecInfo.GetImageEncoders();
EncoderParameters encoderParameters;
encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality,
100L);
thumbnail.Save(path + width + "." + originalFilename, info[1],
encoderParameters);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我想填充图像而不是裁剪
我想写一些PHP代码,自动调整通过表单上传到147x147px的任何图像,但我不知道如何去做(我是一个相对的PHP新手).
到目前为止,我已成功上传图片,识别文件类型并清理名称,但我想将调整大小功能添加到代码中.例如,我有一个2.3MB的测试图像,尺寸为1331x1331,我希望代码可以缩小尺寸,我猜测它也会大大压缩图像的文件大小.
到目前为止,我有以下内容:
if ($_FILES) {
//Put file properties into variables
$file_name = $_FILES['profile-image']['name'];
$file_size = $_FILES['profile-image']['size'];
$file_tmp_name = $_FILES['profile-image']['tmp_name'];
//Determine filetype
switch ($_FILES['profile-image']['type']) {
case 'image/jpeg': $ext = "jpg"; break;
case 'image/png': $ext = "png"; break;
default: $ext = ''; break;
}
if ($ext) {
//Check filesize
if ($file_size < 500000) {
//Process file - clean up filename and move to safe location
$n = "$file_name";
$n = ereg_replace("[^A-Za-z0-9.]", "", $n);
$n = strtolower($n);
$n = "avatars/$n";
move_uploaded_file($file_tmp_name, $n); …Run Code Online (Sandbox Code Playgroud) 我正在寻找如何重新采样以新尺寸表示图像数据的numpy数组,最好选择插值方法(最近,双线性等).我知道有
scipy.misc.imresize
Run Code Online (Sandbox Code Playgroud)
这通过包装PIL的调整大小功能来完成这一点.唯一的问题是,因为它使用PIL,numpy数组必须符合图像格式,给我最多4个"颜色"通道.
我希望能够使用任意数量的"颜色"通道调整任意图像的大小.我想知道是否有一种简单的方法可以在scipy/numpy中执行此操作,或者如果我需要自己滚动.
关于如何自己编造一个我有两个想法:
scipy.misc.imresize分别在每个通道上运行的函数scipy.ndimage.interpolation.affine_transform对于大数据,第一个可能会很慢,而第二个似乎不提供除样条之外的任何其他插值方法.
我正在编写一个opencv程序,我在另一个stackoverflow问题上找到了一个脚本:计算机视觉:屏蔽人手
当我运行脚本的答案时,我收到以下错误:
Traceback (most recent call last):
File "skinimagecontour.py", line 13, in <module>
contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
代码:
import sys
import numpy
import cv2
im = cv2.imread('Photos/test.jpg')
im_ycrcb = cv2.cvtColor(im, cv2.COLOR_BGR2YCR_CB)
skin_ycrcb_mint = numpy.array((0, 133, 77))
skin_ycrcb_maxt = numpy.array((255, 173, 127))
skin_ycrcb = cv2.inRange(im_ycrcb, skin_ycrcb_mint, skin_ycrcb_maxt)
cv2.imwrite('Photos/output2.jpg', skin_ycrcb) # Second image
contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, c in enumerate(contours):
area = cv2.contourArea(c)
if area > 1000:
cv2.drawContours(im, contours, …Run Code Online (Sandbox Code Playgroud) 我正在用OpenCV为Android写作.我正在使用标记控制的分水岭分割类似于下面的图像,而无需用户手动标记图像.我打算使用区域最大值作为标记.
minMaxLoc()会给我价值,但我怎么能把它限制在我感兴趣的blob?我可以利用findContours()cvBlob blob 的结果来限制ROI并对每个blob应用最大值吗?

opencv image-processing computer-vision image-segmentation watershed
我正在尝试将图像转换PIL为OpenCV格式.我正在使用OpenCV 2.4.3.这是我到目前为止所尝试的.
>>> from PIL import Image
>>> import cv2 as cv
>>> pimg = Image.open('D:\\traffic.jpg') #PIL Image
>>> cimg = cv.cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,3) #CV Image
>>> cv.cv.SetData(cimg,pimg.tostring())
>>> cv.cv.NamedWindow('cimg')
>>> cv.cv.ShowImage('cimg',cimg)
>>> cv.cv.WaitKey()
Run Code Online (Sandbox Code Playgroud)
但我认为图像没有转换为CV格式.窗口向我显示一个大的棕色图像.在将图像转换PIL为CV格式时我在哪里出错了?
另外,为什么我需要键入cv.cv访问功能?
这实际上是一个两部分问题,因为我还没有完全理解这些东西是如何工作的:
我的情况:我正在编写一个让用户上传图片的网络应用程序.然后我的应用程序调整为可显示的内容(例如:640x480-ish)并保存文件以供日后使用.
我的问题:
我对此并不十分肯定,因为我认为:(让我们举一个极端的例子),如果某人有500万像素的图像以质量0保存,它就会像任何东西一样块状.将图像尺寸缩小到640x480,可以平滑块状,几乎不那么明显......直到我再次将质量保存为0 ...
在频谱的另一端,如果有一个图像是800x600,q = 0,调整到640x480不会改变它看起来像完全废话的事实,所以用q = 80保存将是多余的.
我甚至关闭了吗?
我在PHP上使用GD2库,如果有任何用处的话
我制作了一个小型的C#应用程序来创建.jpg格式的图像.
pictureBox.Image.Save(name,ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
图像成功创建.我输入原始图片,用它做一些事情并保存.然而,这张新照片的质量低于原始照片的质量.
有没有办法设定所需的质量?
image-processing ×10
opencv ×4
python ×3
c# ×2
algorithm ×1
image-upload ×1
jpeg ×1
numpy ×1
php ×1
scipy ×1
viola-jones ×1
watershed ×1