我有一个定义的固定宽度和高度来调整图像大小.但是,我有这个问题,因为图像可以有任何类型的尺寸比(它可以是垂直或水平).在这种情况下,固定的宽度和高度会引起问题.我想以更智能的方式计算宽度和高度.
例如,假设我已经定义了宽度1024px和高度768px.我想调整一个垂直的图像(高度为1100px,宽度为200px).所以在我的情况下它会调整到固定大小(1024x768),因此宽度将从100px增加到768px,这将非常难看.同样,如果图像的高度小于768px,则会将力度增加到768px.
因此,我想根据原始图像尺寸比率计算新的图像尺寸.让我们说如果上面的示例图像应该调整到最大高度768px,但那么宽度呢?它已经小于我的"最大宽度",即200px,那么宽度应保持不变吗?还是应该进一步减少?
同样,如果图像的高度为200px,宽度为1100px.所以宽度应减少到1024px,但高度怎么样?
第三个问题是,假设高度和宽度都超过最大高度和最大宽度,我们假设宽度:1100px和高度:4000px.现在,由于宽度和高度都超过最大宽度和最大高度,但图像是垂直的,它将使其成为水平.那么如何在这种情况下检查是否应根据最大高度或根据最大宽度调整图像大小?
我很感激任何帮助.
我试图找到图像上的角落,我不需要轮廓,只需要4个角落.我将使用4个角改变视角.
我正在使用Opencv,但我需要知道找到角落的步骤以及我将使用的功能.
我的图像是这样的:(没有红点,我会画点后)

编辑:
在建议的步骤之后,我写了代码:(注意:我没有使用纯OpenCv,我使用javaCV,但逻辑是一样的).
// Load two images and allocate other structures (I´m using other image)
IplImage colored = cvLoadImage(
"res/scanteste.jpg",
CV_LOAD_IMAGE_UNCHANGED);
Run Code Online (Sandbox Code Playgroud)

IplImage gray = cvCreateImage(cvGetSize(colored), IPL_DEPTH_8U, 1);
IplImage smooth = cvCreateImage(cvGetSize(colored), IPL_DEPTH_8U, 1);
//Step 1 - Convert from RGB to grayscale (cvCvtColor)
cvCvtColor(colored, gray, CV_RGB2GRAY);
Run Code Online (Sandbox Code Playgroud)

//2 Smooth (cvSmooth)
cvSmooth( gray, smooth, CV_BLUR, 9, 9, 2, 2);
Run Code Online (Sandbox Code Playgroud)

//3 - cvThreshold - What values?
cvThreshold(gray,gray, 155, 255, CV_THRESH_BINARY);
Run Code Online (Sandbox Code Playgroud)

//4 - Detect edges (cvCanny) -What values?
int N = 7;
int …Run Code Online (Sandbox Code Playgroud) 我有一个WPF BitmapImage,我从.JPG文件加载,如下所示:
this.m_image1.Source = new BitmapImage(new Uri(path));
Run Code Online (Sandbox Code Playgroud)
我想查询特定点的颜色.例如,像素(65,32)处的RGB值是多少?
我该怎么做?我采取这种方法:
ImageSource ims = m_image1.Source;
BitmapImage bitmapImage = (BitmapImage)ims;
int height = bitmapImage.PixelHeight;
int width = bitmapImage.PixelWidth;
int nStride = (bitmapImage.PixelWidth * bitmapImage.Format.BitsPerPixel + 7) / 8;
byte[] pixelByteArray = new byte[bitmapImage.PixelHeight * nStride];
bitmapImage.CopyPixels(pixelByteArray, nStride, 0);
Run Code Online (Sandbox Code Playgroud)
虽然我会承认有一些猴子看到,猴子继续这个代码.无论如何,是否有一种直接的方法来处理这个字节数组转换为RGB值?
在javadocs之后,我试图扩展一个BufferedImage没有成功的是我的代码:
BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded);
Graphics2D grph = image.createGraphics();
grph.scale(2.0, 2.0);
grph.dispose();
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么它不起作用,有什么帮助吗?
我需要为我正在处理的应用程序实施红眼减弱.
谷歌搜索主要提供商业最终用户产品的链接.
你知道一个好的红眼减少算法,它可以在GPL应用程序中使用吗?
所以我有一组数据,我能够转换成R,G,B波段的单独numpy数组.现在我需要将它们组合起来形成RGB图像.
我试过'Image'来完成这项工作,但它需要'模式'来归因.
我试图做一个技巧.我会使用Image.fromarray()将数组带到图像,但默认情况下,当Image.merge需要合并"L"模式图像时,它会达到'F'模式.如果我在第一个位置将fromarray()中的数组属性声明为'L',则所有RGB图像都会失真.
但是,如果我保存图像,然后打开它们然后合并,它工作正常.图像以"L"模式读取图像.
现在我有两个问题.
首先,我不认为这是一种优雅的工作方式.所以,如果有人知道更好的方法,请告诉我们
其次,Image.SAVE无法正常工作.以下是我面临的错误:
In [7]: Image.SAVE(imagefile, 'JPEG')
----------------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/media/New Volume/Documents/My own works/ISAC/SAMPLES/<ipython console> in <module>()
TypeError: 'dict' object is not callable
Run Code Online (Sandbox Code Playgroud)
请建议解决方案.
请注意,图像大小为4000x4000.
拍摄一张纸时(例如,使用电话摄像头),我得到以下结果(左图)(jpg 在此处下载)。所需的结果(使用图像编辑软件手动处理)在右侧:

我想用openCV处理原始图像,以自动获得更好的亮度/对比度(以使背景更白)。
假设:图像具有A4纵向格式(在本主题中,我们无需对其进行透视变形),并且纸页为白色,可能带有黑色或彩色的文本/图像。
到目前为止,我已经尝试过:
各种自适应阈值方法,例如高斯,OTSU(请参阅OpenCV doc 图像阈值)。通常可以与OTSU配合使用:
ret, gray = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)
Run Code Online (Sandbox Code Playgroud)
但仅适用于灰度图像,不适用于彩色图像。此外,输出是二进制(白色或黑色),我不希望这样:我更喜欢保留彩色非二进制图像作为输出
如本建议答案(直方图均衡化不是彩色图像的工作- OpenCV的)或该一个(OpenCV的Python的equalizeHist彩色图像):
img3 = cv2.imread(f)
img_transf = cv2.cvtColor(img3, cv2.COLOR_BGR2YUV)
img_transf[:,:,0] = cv2.equalizeHist(img_transf[:,:,0])
img4 = cv2.cvtColor(img_transf, cv2.COLOR_YUV2BGR)
cv2.imwrite('test.jpg', img4)
Run Code Online (Sandbox Code Playgroud)
或使用HSV:
img_transf = cv2.cvtColor(img3, cv2.COLOR_BGR2HSV)
img_transf[:,:,2] = cv2.equalizeHist(img_transf[:,:,2])
img4 = cv2.cvtColor(img_transf, cv2.COLOR_HSV2BGR)
Run Code Online (Sandbox Code Playgroud)
不幸的是,结果非常糟糕,因为它会在本地创建可怕的微对比度(?):

我还尝试了YCbCr,这很相似。
我还尝试了CLAHE(对比度受限的自适应直方图均衡化),范围tileGridSize从 …
python opencv image-processing computer-vision image-thresholding
我正在开发一个Android应用程序,它正在处理来自摄像头的输入图像并将其显示给用户.这很简单,我PreviewCallback在相机对象上注册了一个setPreviewCallbackWithBuffer.这很简单,并且可以与旧的相机API一起使用
public void onPreviewFrame(byte[] data, Camera cam) {
// custom image data processing
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试移植我的应用程序以利用新的Camera2 API,我不确定我该怎么做.我在L预览示例中使用了Camera2Video,可以录制视频.但是,样本中没有直接的图像数据传输,因此我不明白应该在何处获取图像像素数据以及如何处理它.
有人可以帮我或建议如何获得PreviewCallbackandroid L 的功能,或者如何在将其显示到屏幕之前处理相机的预览数据?(相机对象上没有预览回调)
谢谢!
camera android image-processing preview android-5.0-lollipop