相关疑难解决方法(0)

在C++中的OpenCV中无需裁剪即可旋转图像

我想旋转图像,但是如果没有裁剪,我无法获得旋转的图像

我原来的形象:

在此输入图像描述

现在我使用这段代码:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

// Compile with g++ code.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc

int main()
{
    cv::Mat src = cv::imread("im.png", CV_LOAD_IMAGE_UNCHANGED);
    cv::Mat dst;

    cv::Point2f pc(src.cols/2., src.rows/2.);
    cv::Mat r = cv::getRotationMatrix2D(pc, -45, 1.0);

    cv::warpAffine(src, dst, r, src.size()); // what size I should use?

    cv::imwrite("rotated_im.png", dst);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并获得以下图像:

在此输入图像描述

但我想得到这个:

在此输入图像描述

非常感谢您的帮助!

c++ opencv

52
推荐指数
6
解决办法
5万
查看次数

直方图均衡不适用于彩色图像 - OpenCV

我正在尝试使用OpenCV使用以下函数执行直方图均衡

Mat Histogram::Equalization(const Mat& inputImage)
{
    if(inputImage.channels() >= 3)
    {
        vector<Mat> channels;
        split(inputImage,channels);
        Mat B,G,R;

        equalizeHist( channels[0], B );
        equalizeHist( channels[1], G );
        equalizeHist( channels[2], R );
        vector<Mat> combined;
        combined.push_back(B);
        combined.push_back(G);
        combined.push_back(R);
        Mat result;
        merge(combined,result);
        return result;
    }
    return Mat();
}
Run Code Online (Sandbox Code Playgroud)

但是当我得到结果时,输入和输出图像似乎没有区别,我做错了什么?

对不起图像质量不好,"预处理"(左)是直方图均衡,你可以看到它与输入相同(右).

在此输入图像描述

错过了什么?

c++ opencv image-processing histogram

21
推荐指数
2
解决办法
3万
查看次数

OpenCV Python equalizeHist彩色图像

我需要对彩色图像进行直方图均衡.

首先,我将彩色图像转换为灰色并将其赋予equalizeHist功能:

image = cv2.imread("photo.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.equalizeHist(image)
cv2.imshow("equalizeHist", image)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

但在此之后我需要将图像转换回RGB; 我怎样才能做到这一点?

python opencv

15
推荐指数
5
解决办法
4万
查看次数

如何在Python OpenCV中增加图像的对比度

我是Python OpenCV的新手.我在这里阅读了一些文档和答案,但我无法弄清楚以下代码的含义:

if (self.array_alpha is None):
    self.array_alpha = np.array([1.25])
    self.array_beta = np.array([-100.0])

# add a beta value to every pixel 
cv2.add(new_img, self.array_beta, new_img)                    

# multiply every pixel value by alpha
cv2.multiply(new_img, self.array_alpha, new_img)  
Run Code Online (Sandbox Code Playgroud)

我已经知道了Basically, every pixel can be transformed as X = aY + b where a and b are scalars..基本上,我已经理解了这一点.但是,我不明白代码以及如何增加对比度.

直到现在,我已经设法简单地使用了图像 img = cv2.imread('image.jpg',0)

谢谢你的帮助

python opencv

15
推荐指数
6
解决办法
6万
查看次数

如何在RGB彩色图像上应用CLAHE

CLAHE是对比有限自适应直方图均衡和C中的源可以在http://tog.acm.org/resources/GraphicsGems/gemsiv/clahe.c找到.

到目前为止,我只看到了一些关于在灰度图像上应用CLAHE的示例/教程,所以是否可以在彩色图像上应用CLAHE(例如RGB 3通道图像)?如果有,怎么样?

opencv computer-vision

14
推荐指数
2
解决办法
2万
查看次数

如何获取和设置EmguCV Mat图像的像素值?

我正在使用EmguCV 3.0.0包装器来访问OpenCV 3.0库.我Mat在几个地方使用这门课.以下是单个通道的示例,8x8图像由double值组成:

Mat image = new Mat(8, 8, DepthType.Cv64F, 1);
Run Code Online (Sandbox Code Playgroud)

Image<>类提供用于获取和设置的像素值合理的手段,并且该方法是对相同的Matrix<>类,但是它似乎没有那么明显的Mat类.我弄清楚如何设置单个像素的唯一方法是使用掩码:

// set two pixel values, (0,0) to 9.0, (2, 3) to 42.0

Matrix<byte> mask = new Matrix<byte>(8,8);
mask.Data[0, 0] = 1;
image.SetTo(new MCvScalar(9.0), mask);

mask = new Matrix<byte>(8,8);
mask.Data[2, 3] = 1;
image.SetTo(new MCvScalar(42.0), mask);
Run Code Online (Sandbox Code Playgroud)

感觉它应该是两行,而不是六行,所以我觉得我错过了一些东西.当Mat多个通道时,事情变得更加复杂,因为Matrix<>只有2D,因此必须使用掩模来设置每个通道上的像素.

我无法承受以这种方式设置像素的时间或内存. 如何通过单个方法调用设置像素?

c# image-processing emgucv mat

9
推荐指数
2
解决办法
2万
查看次数

如何自动调整颜色和对比度

在我的项目中,我想实现一个模块,自动添加或删除给定图片的对比度.我的问题是,找出我可以添加或删除多少对比度.我知道photoshops自动对比度/自动颜色功能.有人可以解释一下它的工作原理或理论/论文/想法如何实现这一点?

我知道,有一个直方图均衡功能.但那并不是我想要的功能.

例如,我想选择这三个与图像匹配的渐变曲线中的一个.

图片由ImageShack.us 主持http://img94.imageshack.us/img94/2656/grad2f.jpg 图片由ImageShack.us主持http://img819.imageshack.us/img819/9956/grad1j.jpg ImageShack 主持的图片.us http://img507.imageshack.us/img507/8176/grad0.jpg

问候

algorithm opencv image-processing computer-vision

8
推荐指数
1
解决办法
1万
查看次数

使用OpenCV自动调整图像的亮度

我想在OpenCV中将图像的亮度调整为某个值。例如,考虑以下图像:

原始图像

我用以下方法计算亮度:

import cv2
img = cv2.imread(filepath)
cols, rows = img.shape
brightness = numpy.sum(img) / (255 * cols * rows)
Run Code Online (Sandbox Code Playgroud)

我得到的平均亮度为35%。例如,将其提高到66%,我这样做:

minimum_brightness = 0.66
alpha = brightness / minimum_brightness
bright_img = cv2.convertScaleAbs(img, alpha = alpha, beta = 255 * (1 - alpha))
Run Code Online (Sandbox Code Playgroud)

我得到的图像似乎具有50%的透明面纱:

具有偏见和对比度的图像

我可以通过仅使用偏差来避免这种影响:

bright_img = cv2.convertScaleAbs(img, alpha = 1, beta = 128)
Run Code Online (Sandbox Code Playgroud)

而且图像似乎也带有面纱:

图像仅通过偏置进行调整

如果我手动进行此操作,例如在Photoshop中将亮度调整为150,则结果似乎还不错:

用Photoshop调整图像

但是,这不是自动的,不会提供目标亮度。

我可以通过伽玛校正和/或直方图均衡来实现,以获得更自然的结果,但是除了反复试验外,我看不到获得目标亮度的简便方法。

有没有人成功将亮度自动调整为目标?

更新资料

卡纳特建议:

bright_img = cv2.convertScaleAbs(img, alpha = 1, beta = 255 * (minimum_brightness - brightness))
Run Code Online (Sandbox Code Playgroud)

结果更好,但仍然有面纱:

卡纳特建议调整的图像

Yves Daoust建议保持beta = 0,因此我进行了调整 …

python opencv image-processing brightness computer-vision

5
推荐指数
1
解决办法
1013
查看次数

如何使用 opencv python 调整亮度、对比度和振动?

我是图像处理的新手。我用Python3编程,使用OpenCV图像处理库。我想调整以下属性。

  1. 亮度
  2. 对比
  3. 活力
  4. 色调
  5. 饱和
  6. 亮度

对于 4、5、6。我使用以下代码转换为 HSV 空间。

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
h += value # 4
s += value # 5
v += value # 6
final_hsv = cv2.merge((h, s, v))
img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
Run Code Online (Sandbox Code Playgroud)

我为 1 和 2 找到的唯一教程是这里。本教程使用 C++,但我使用 Python 编程。另外,我不知道如何调整 3. 振动。我非常感谢您的帮助,谢谢!

python opencv brightness contrast

4
推荐指数
1
解决办法
2万
查看次数