相关疑难解决方法(0)

动态变量如何影响性能?

我对dynamicC#的性能有疑问.我读过dynamic让编译器再次运行,但是它做了什么?

是否必须dynamic使用用作参数的变量或仅具有动态行为/上下文的行重新编译整个方法?

我注意到使用dynamic变量可以将简单的for循环减慢2个数量级.

我玩过的代码:

internal class Sum2
{
    public int intSum;
}

internal class Sum
{
    public dynamic DynSum;
    public int intSum;
}

class Program
{
    private const int ITERATIONS = 1000000;

    static void Main(string[] args)
    {
        var stopwatch = new Stopwatch();
        dynamic param = new Object();
        DynamicSum(stopwatch);
        SumInt(stopwatch);
        SumInt(stopwatch, param);
        Sum(stopwatch);

        DynamicSum(stopwatch);
        SumInt(stopwatch);
        SumInt(stopwatch, param);
        Sum(stopwatch);

        Console.ReadKey();
    }

    private static void Sum(Stopwatch stopwatch)
    {
        var sum = 0;
        stopwatch.Reset();
        stopwatch.Start();
        for …
Run Code Online (Sandbox Code Playgroud)

c# performance dynamic

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

在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自动调整一张纸的彩色照片的对比度和亮度

拍摄一张纸时(例如,使用电话摄像头),我得到以下结果(左图)(jpg 在此处下载)。所需的结果(使用图像编辑软件手动处理)在右侧:

我想用openCV处理原始图像,以自动获得更好的亮度/对比度(以使背景更白)

假设:图像具有A4纵向格式(在本主题中,我们无需对其进行透视变形),并且纸页为白色,可能带有黑色或彩色的文本/图像。

到目前为止,我已经尝试过:

  1. 各种自适应阈值方法,例如高斯,OTSU(请参阅OpenCV doc 图像阈值)。通常可以与OTSU配合使用:

    ret, gray = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)
    
    Run Code Online (Sandbox Code Playgroud)

    但仅适用于灰度图像,不适用于彩色图像。此外,输出是二进制(白色或黑色),我不希望这样:我更喜欢保留彩色非二进制图像作为输出

  2. 直方图均衡

    • 应用于Y(在RGB => YUV变换之后)
    • 或应用于V(在RGB => HSV变换之后),

    如本建议答案直方图均衡化不是彩色图像的工作- 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,这很相似。

  3. 我还尝试了CLAHE(对比度受限的自适应直方图均衡化),范围tileGridSize从 …

python opencv image-processing computer-vision image-thresholding

40
推荐指数
5
解决办法
3094
查看次数

在.NET中使用动态类型的性能成本

在.NET 中使用dynamicvs 的性能成本是object多少?比方说,我有一个接受任何类型参数的方法.例如

public void Foo(object obj)
{
}
Run Code Online (Sandbox Code Playgroud)

要么

public void Foo(dynamic obj)
{
}
Run Code Online (Sandbox Code Playgroud)

ILSpy告诉我,在使用动态代码时,编译器必须插入代码块来处理动态.因此,我想知道是否建议使用动态代替对象,以及这种用法以性能为代价达到什么级别?

.net c# compiler-construction performance dynamic

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