相关疑难解决方法(0)

模糊图像的自适应阈值

我有一个相当模糊的数独谜题的432x432图像,其自适应阈值不好(取5x5像素的块大小,然后减去2):

在此输入图像描述

正如你所看到的,数字略有扭曲,其中有很多破损,而且有5s融入6s和6s融入8s.此外,还有很多噪音.为了修复噪声,我必须使用高斯模糊使图像更加模糊.然而,即使是相当大的高斯内核和自适应阈值blockSize(21x21,减去2)也无法消除所有断点并将数字融合在一起甚至更多:

在此输入图像描述

我还尝试在阈值处理后扩展图像,这与增加blockSize有类似的效果; 并且锐化图像,这在某种程度上没有太大作用.我还应该尝试什么?

opencv image-processing threshold

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

如何使用OpenCV获得像Cam Scanner一样的Magic Color效果

这是原始图像.

原始图像

Cam Scanner魔幻色彩效果.凸轮扫描仪效果

我在图像上的过滤器.

我的过滤器

我正在改变图像的对比度.

dst.convertTo(dst, -1, 2, 0);
Run Code Online (Sandbox Code Playgroud)

然后使用高斯模糊进行平滑.

cv::GaussianBlur(dst,result,cv::Size(0,0),3);
cv::addWeighted(dst, 1.5, result, -0.5, 0, result);
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能对我的形象产生这种影响?

UPDATE

直方图均衡后 -

vector<Mat> channels;
Mat img_hist_equalized;
cvtColor(dst, img_hist_equalized, CV_BGR2YCrCb);
split(img_hist_equalized,channels);
equalizeHist(channels[0], channels[0]);
merge(channels,img_hist_equalized);
cvtColor(img_hist_equalized, img_hist_equalized, CV_YCrCb2BGR);
Run Code Online (Sandbox Code Playgroud)

直方图均衡

c c++ android opencv android-ndk

16
推荐指数
2
解决办法
5587
查看次数

低对比度图像分割

我有低对比度图像分割的问题.任务是找到表面缺陷.它们是可见的(缺陷总是暗区)但图像的对比度非常低.以下两个样本.

1 2

我尝试过增强对比度然后进行阈值处理:

Mat tmp1 = imread("C:\\framesRoi\\311.bmp",0);
stretchContrast(tmp1);
threshold(tmp1,tmp1,75,255,THRESH_BINARY);
Run Code Online (Sandbox Code Playgroud)

拉伸对比度的地方:

int minValue = 255, maxValue = 0;
const int l = sourceImg.cols * sourceImg.rows * sourceImg.channels();
if(sourceImg.isContinuous())
{
    uchar* ptr = sourceImg.ptr<uchar>(0);
    for(int i = 0; i < l; ++i)
    {
        if(ptr[i] < minValue)
        {
            minValue = ptr[i];
        }
        if(ptr[i] > maxValue)
        {
            maxValue = ptr[i];
        }
    }
}
cout<<"min: "<<minValue<<";"<<"max value: "<<maxValue<<endl;

const int  magicThreshold = 10;
if(sourceImg.isContinuous())
{
    uchar* ptr = sourceImg.ptr<uchar>(0);
    for(int i = 0; i < l; …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing computer-vision

14
推荐指数
1
解决办法
1669
查看次数

如何在不损失质量的情况下调整图像大小(缩小)

我想将png图片的大小从476x402调整为439x371,我使用了PIL(image)或opencv的调整大小方法,但是,它会损失一些清晰度。调整大小后,图片变得模糊。如何使用 python 调整(缩小)图像而不丢失清晰度?

from skimage import transform, data, io
from PIL import Image
import os
import cv2

infile = 'D:/files/script/org/test.png'
outfile = 'D:/files/script/out/test.png'

''' PIL'''
def fixed_size1(width, height):
    im = Image.open(infile)
    out = im.resize((width, height),Image.ANTIALIAS)
    out.save(outfile)

''' open cv'''
def fixed_size2(width, height):
    img_array = cv2.imread(infile)
    new_array = cv2.resize(img_array, (width, height), interpolation=cv2.INTER_CUBIC)
    cv2.imwrite(outfile, new_array)


def fixed_size3(width, height):
    img = io.imread(infile)
    dst = transform.resize(img, (439, 371))
    io.imsave(outfile, dst)

fixed_size2(371, 439)
Run Code Online (Sandbox Code Playgroud)

来源:476x402

来源:476x402

调整大小:439x371

调整大小:439x371

python image

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

如何用twain/emgu/open cv实现良好的清晰度?

我正在使用Epson Perfection V700扫描仪,并在使用他们的工具进行扫描时选择以下选项:

  • ICM色彩校正(来源:EPSON-Standard和目标:sRGB)
  • 不锋利的面膜(中)

这会产生这样的图像:

来自Epson Tool的图片

现在我的问题是 - 我实际上需要使用TWAIN .Net与此扫描仪进行交互,当我这样做时,我得到的图像是这样的:

TWAIN扫描图像

旁白:我取消选择前面提到的两个选项并再次使用Epson进行扫描,得到的图像非常类似于我通过TWAIN获得的图像.

所以我认为也许这些是我可以在图像上自己完成的后期处理步骤(也许它们是以某种方式在硬件中完成的,我不知道).

我正在使用EmguCV,所以我首先创建了一个应用ICM的扩展方法(我很难找到这个的任何文档,所以这是一个猜测,也许我马上就错了,但我从这里得到的信息:位图转换类似乎对图像产生了影响):

public static Image<Bgr, TDepth> ApplyIcm<TDepth>(
    this Image<Bgr, TDepth> source,
    string sourceIcm,
    string targetIcm)
    where TDepth : new()
{
    var target = source.CopyBlank();

    using (source)
    {
        using (var b = source.Bitmap)
        {
            using (var memory = new MemoryStream())
            {
                b.Save(memory, ImageFormat.Bmp);
                memory.Position = 0;

                var bitmapImage = new BitmapImage();
                bitmapImage.BeginInit();
                bitmapImage.StreamSource = memory;
                bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                bitmapImage.EndInit();

                var …
Run Code Online (Sandbox Code Playgroud)

.net c# twain opencv emgucv

6
推荐指数
1
解决办法
1851
查看次数

如何在OpenCV中锐化图像

一个基本的Google搜索会找到这个SO问题,什么似乎是一个很好的答案。但是,当我尝试时,它对锐化模糊的图像完全没有效果。

有人可以弄清楚我做错了什么吗?

到目前为止,我要做的是在图像上实现filter2D函数以消除随机噪声,这也模糊了我的周期性噪声,这非常好。现在,我已经消除了噪点,现在我想对图像进行锐化处理,以使其看起来比原始图像的噪点少。这是我的代码:-

   anchor = Point( -1, -1 );
   delta = 0;
   ddepth = -1;
   dst = frame;
   dst2 = image;

  filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT );

  cv::GaussianBlur(frame, image, cv::Size(0, 0), 11);
  cv::addWeighted(frame, 1.5, image, -0.5, 0, image);
Run Code Online (Sandbox Code Playgroud)

该高斯模糊和addWeighted使NO差异的图像任何责任。另外,为了澄清,也没有任何代码错误。

c++ opencv image

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

索贝尔过滤后如何消除噪音?

我的问题很简单.我对中值滤波的灰度图像进行了Sobel滤波.索贝尔滤波后的图像是

纹理地板中的矩形物体]![纹理地板中的矩形物体]

矩形物体是我感兴趣的.我试图从图像中提取它.

如您所见,与物体一起,由于地板的纹理,会产生更多噪音.因此,边缘图像如下(具有更多的假边缘)

在此输入图像描述

索贝尔过滤后如何消除噪音?或者我如何克服这个障碍?

您的建议或指导将帮助我理解图像处理及其挑战.

谢谢

opencv edge-detection image-segmentation

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

opencv findChessboardCorners 失败

我的 python 代码在图像上找不到棋盘。我使用此代码来解决此任务:

import numpy as np
import cv2
import glob

# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
a = 7
b = 6
objp = np.zeros((b*a,3), np.float32)
objp[:,:2] = np.mgrid[0:a,0:b].T.reshape(-1,2)

# Arrays to store object points and image points from all the images.
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.

images = glob.glob('*.jpg')

for fname …
Run Code Online (Sandbox Code Playgroud)

opencv image-processing

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

使用 OpenCV 实现反锐化掩码

我想像 Adob​​e Photoshop 一样应用不清晰的蒙版,我知道这个答案,但它不如 Photoshop 清晰。

Photoshop 在 Smart Sharpen 对话框中有 3 个参数:Amount、Radius、Reduce Noise;我想实现所有这些。 在此处输入图片说明

根据 SO 中的各种来源,这是我编写的代码。但是在某些阶段(“blurred”、“unsharpMask”、“highContrast”)结果很好,但在最后阶段(“retval”)结果不好。

我哪里错了,我应该改进什么?

是否可以在性能方面改进以下算法?

#include "opencv2/opencv.hpp"
#include "fstream"
#include "iostream"
#include <chrono>

using namespace std;
using namespace cv;

// from https://docs.opencv.org/3.4/d3/dc1/tutorial_basic_linear_transform.html
void increaseContrast(Mat img, Mat* dst, int amountPercent)
{
    *dst = img.clone();
    double alpha = amountPercent / 100.0;
    *dst *= alpha;
}

// from /sf/answers/41737041/
float luminanceAsPercent(Vec3b color)
{
    return (0.2126 * color[2]) + (0.7152 * color[1]) + (0.0722 * color[0]);
}

// …
Run Code Online (Sandbox Code Playgroud)

c++ photoshop opencv image-processing

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