OpenCV基础操作与图像处理 - 指南

news/2025/10/18 14:48:07/文章来源:https://www.cnblogs.com/yxysuanfa/p/19146925

目录

一、基础操作

1. 图像的基本操作

1.1 读取、显示和保存图像

1.2 图像的基本属性

1.3 图像的创建与初始化

1.4 图像的像素操作

2. 图像的几何变换

2.1 缩放、旋转、平移、翻转

2.2 仿射变换与透视变换

3.图像的颜色空间转换

3.1 RGB、灰度、HSV等颜色空间

3.2 颜色空间转换

3.3 通道分离与合并

4. 实例

4.1 图像的读取与显示

4.2 图像的保存

4.3 获取图像属性

4.4 访问和修改像素值

4.5 图像颜色空间转换

4.6 图像的裁剪与缩放

4.7 图像的复制与克隆

4.8 图像的几何变换

二、图像处理

1. 图像滤波

1.1 均值滤波

1.2 高斯滤波

1.3 中值滤波

1.4 自定义滤波器

2. 图像边缘检测

2.1 Sobel算子

2.2 Canny 边缘检测

3. 图像形态学操作

3.1 腐蚀

3.2 膨胀

3.3 开运算

3.4 闭运算

形态学梯度

4. 图像阈值化

4.1 二值化

4.2 自适应阈值

4.3 Otsu阈值法

5. 图像直方图

5.1 计算直方图

5.2 直方图均衡化

5.3 直方图对比

6. 实例

6.1 图像滤波

6.2 边缘检测

6.3 图像阈值化

6.4 形态学操作

6.5 轮廓检测


一、基础操作

1. 图像的基本操作

1.1 读取、显示和保存图像

在 OpenCV 中,图像的基本操作包括读取、显示和保存图像。这些操作是图像处理的基础。

读取图像:使用imread函数读取图像。该函数的第一个参数是图像文件的路径,第二个参数是读取图像的方式(如彩色图像、灰度图像等)。

cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR);

显示图像:使用imshow函数显示图像。该函数的第一个参数是窗口的名称,第二个参数是要显示的图像。

cv::imshow("Display Window", image);
cv::waitKey(0); // 等待按键按下

保存图像:使用imwrite函数保存图像。该函数的第一个参数是保存文件的路径,第二个参数是要保存的图像。

cv::imwrite("output.jpg", image);

1.2 图像的基本属性

图像的基本属性包括尺寸、通道数和像素值。

尺寸:图像的尺寸可以通过rowscols属性获取。

int height = image.rows;
int width = image.cols;

通道数:图像的通道数可以通过channels()方法获取。

int channels = image.channels();

像素值:可以通过at方法访问图像的像素值。

cv::Vec3b pixel = image.at(y, x); // 访问(x, y)处的像素值

1.3 图像的创建与初始化

可以通过Mat类创建和初始化图像。

创建图像:可以创建一个指定大小和类型的图像。

cv::Mat newImage(480, 640, CV_8UC3, cv::Scalar(0, 0, 255)); // 创建一个640x480的红色图像

初始化图像:可以使用setTo方法初始化图像。

image.setTo(cv::Scalar(255, 255, 255)); // 将图像初始化为白色

1.4 图像的像素操作

图像的像素操作包括遍历像素和修改像素值。

遍历像素:可以使用双重循环遍历图像的每个像素。

for (int y = 0; y < image.rows; y++) {for (int x = 0; x < image.cols; x++) {cv::Vec3b& pixel = image.at(y, x);// 对像素进行操作}
}

修改像素值:可以直接修改像素的值。

pixel[0] = 255; // 将蓝色通道设置为255
pixel[1] = 0;   // 将绿色通道设置为0
pixel[2] = 0;   // 将红色通道设置为0

2. 图像的几何变换

2.1 缩放、旋转、平移、翻转

图像的几何变换包括缩放、旋转、平移和翻转。

缩放:使用resize函数缩放图像。

cv::Mat resizedImage;
cv::resize(image, resizedImage, cv::Size(newWidth, newHeight));

旋转:使用getRotationMatrix2DwarpAffine函数旋转图像。

cv::Point2f center(image.cols / 2.0, image.rows / 2.0);
cv::Mat rotationMatrix = cv::getRotationMatrix2D(center, angle, 1.0);
cv::Mat rotatedImage;
cv::warpAffine(image, rotatedImage, rotationMatrix, image.size());

平移:使用warpAffine函数平移图像。

cv::Mat translationMatrix = (cv::Mat_(2, 3) << 1, 0, tx, 0, 1, ty);
cv::Mat translatedImage;
cv::warpAffine(image, translatedImage, translationMatrix, image.size());

翻转:使用flip函数翻转图像。

cv::Mat flippedImage;
cv::flip(image, flippedImage, 1); // 1表示水平翻转,0表示垂直翻转

2.2 仿射变换与透视变换

仿射变换:仿射变换是线性变换加上平移,可以使用warpAffine函数实现。

cv::Mat affineMatrix = cv::getAffineTransform(srcPoints, dstPoints);
cv::Mat affineImage;
cv::warpAffine(image, affineImage, affineMatrix, image.size());

透视变换:透视变换是更一般的变换,可以使用warpPerspective函数实现。

cv::Mat perspectiveMatrix = cv::getPerspectiveTransform(srcPoints, dstPoints);
cv::Mat perspectiveImage;
cv::warpPerspective(image, perspectiveImage, perspectiveMatrix, image.size());

3.图像的颜色空间转换

3.1 RGB、灰度、HSV等颜色空间

图像的颜色空间包括RGB、灰度和HSV等。

  • RGB:RGB是最常见的颜色空间,表示红、绿、蓝三个通道。
  • 灰度:灰度图像只有一个通道,表示亮度。
  • HSV:HSV颜色空间表示色调(Hue)、饱和度(Saturation)和亮度(Value)。

3.2 颜色空间转换

使用 cvtColor 函数进行颜色空间转换。

RGB 转灰度

cv::Mat grayImage;
cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

RGB转HSV

cv::Mat hsvImage;
cv::cvtColor(image, hsvImage, cv::COLOR_BGR2HSV);

3.3 通道分离与合并

通道分离:使用split函数将图像的通道分离。

std::vector channels;
cv::split(image, channels);

通道合并:使用merge函数将多个通道合并为一个图像。

cv::Mat mergedImage;
cv::merge(channels, mergedImage);

4. 实例

C++ OpenCV 的基础操作包括图像的读取、显示、保存、像素操作、图像属性获取等。以下是一些常见的 OpenCV 基础操作及其代码示例:

4.1 图像的读取与显示

#include 
#include 
using namespace cv;
using namespace std;
int main() {// 读取图像Mat image = imread("test.jpg");// 检查图像是否成功加载if (image.empty()) {cout << "错误:无法加载图像,请检查路径是否正确。" << endl;return -1;}// 显示图像namedWindow("Display Image", WINDOW_AUTOSIZE);imshow("Display Image", image);// 等待按键waitKey(0);// 关闭窗口destroyAllWindows();return 0;
}

4.2 图像的保存

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    // 读取图像
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 保存图像
    bool isSaved = imwrite("saved_image.jpg", image);
    if (isSaved) {
        cout << "图像保存成功!" << endl;
    } else {
        cout << "图像保存失败!" << endl;
    }
    return 0;
}

4.3 获取图像属性

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    // 读取图像
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 获取图像属性
    int width = image.cols;  // 图像宽度
    int height = image.rows; // 图像高度
    int channels = image.channels(); // 图像通道数
    cout << "图像宽度: " << width << endl;
    cout << "图像高度: " << height << endl;
    cout << "图像通道数: " << channels << endl;
    return 0;
}

4.4 访问和修改像素值

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    // 读取图像
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 访问像素值(BGR格式)
    Vec3b pixel = image.at(100, 100); // 获取(100, 100)位置的像素值
    cout << "B: " << (int)pixel[0] << ", G: " << (int)pixel[1] << ", R: " << (int)pixel[2] << endl;
    // 修改像素值
    image.at(100, 100) = Vec3b(255, 0, 0); // 将(100, 100)位置的像素设置为蓝色
    // 显示修改后的图像
    imshow("Modified Image", image);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

4.5 图像颜色空间转换

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    // 读取图像
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    // 显示灰度图像
    imshow("Gray Image", grayImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

4.6 图像的裁剪与缩放

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    // 读取图像
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 裁剪图像
    Rect roi(100, 100, 200, 200); // (x, y, width, height)
    Mat croppedImage = image(roi);
    // 缩放图像
    Mat resizedImage;
    resize(image, resizedImage, Size(400, 400)); // 缩放到400x400
    // 显示裁剪和缩放后的图像
    imshow("Cropped Image", croppedImage);
    imshow("Resized Image", resizedImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

4.7 图像的复制与克隆

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    // 读取图像
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 复制图像
    Mat copiedImage = image.clone();
    // 修改复制的图像
    circle(copiedImage, Point(100, 100), 50, Scalar(0, 255, 0), 2); // 在复制的图像上画一个圆
    // 显示原始图像和修改后的图像
    imshow("Original Image", image);
    imshow("Copied Image", copiedImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

4.8 图像的几何变换

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    // 读取图像
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 旋转图像
    Mat rotatedImage;
    Point2f center(image.cols / 2, image.rows / 2); // 旋转中心
    double angle = 45; // 旋转角度
    double scale = 1.0; // 缩放比例
    Mat rotationMatrix = getRotationMatrix2D(center, angle, scale);
    warpAffine(image, rotatedImage, rotationMatrix, image.size());
    // 显示旋转后的图像
    imshow("Rotated Image", rotatedImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

二、图像处理

1. 图像滤波

图像滤波是图像处理中的一种基本操作,主要用于去除图像中的噪声或增强图像的某些特征。常见的滤波方法包括均值滤波、高斯滤波、中值滤波以及自定义滤波器。

1.1 均值滤波

均值滤波是一种简单的线性滤波方法,它将图像中每个像素的值替换为其邻域内所有像素值的平均值。这种方法可以有效去除噪声,但也会使图像变得模糊。

cv::Mat src = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat dst;
cv::blur(src, dst, cv::Size(3, 3));  // 3x3的均值滤波

1.2 高斯滤波

高斯滤波是一种非线性滤波方法,它使用高斯函数来计算邻域内像素的权重,从而对图像进行平滑处理。高斯滤波在去除噪声的同时,能够更好地保留图像的边缘信息。

cv::GaussianBlur(src, dst, cv::Size(5, 5), 0);  // 5x5的高斯滤波

1.3 中值滤波

中值滤波是一种非线性滤波方法,它将图像中每个像素的值替换为其邻域内所有像素值的中值。这种方法在去除椒盐噪声时效果非常好。

cv::medianBlur(src, dst, 5);  // 5x5的中值滤波

1.4 自定义滤波器

OpenCV允许用户自定义滤波器核,通过cv::filter2D函数可以实现自定义滤波操作。

cv::Mat kernel = (cv::Mat_(3, 3) << 1, 0, -1, 0, 0, 0, -1, 0, 1);
cv::filter2D(src, dst, -1, kernel);

2. 图像边缘检测

边缘检测是图像处理中的一个重要任务,用于识别图像中物体的边界。常用的边缘检测方法包括Sobel算子和Canny边缘检测。

2.1 Sobel算子

Sobel算子是一种基于梯度的边缘检测方法,它可以检测图像中的水平和垂直边缘。

cv::Mat grad_x, grad_y;
cv::Sobel(src, grad_x, CV_16S, 1, 0);  // 水平方向
cv::Sobel(src, grad_y, CV_16S, 0, 1);  // 垂直方向
cv::convertScaleAbs(grad_x, grad_x);
cv::convertScaleAbs(grad_y, grad_y);
cv::addWeighted(grad_x, 0.5, grad_y, 0.5, 0, dst);  // 合并结果

2.2 Canny 边缘检测

Canny 边缘检测是一种多阶段的边缘检测算法,它能够有效地检测出图像中的边缘,并且对噪声具有较强的鲁棒性。

cv::Canny(src, dst, 100, 200);  // 阈值1=100,阈值2=200

3. 图像形态学操作

形态学操作是基于图像形状的一系列操作,常用于图像的前景和背景分离、噪声去除等任务。常见的形态学操作包括腐蚀、膨胀、开运算、闭运算和形态学梯度。

3.1 腐蚀

腐蚀操作可以消除图像中的小物体或细节,使得前景物体变小。

cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
cv::erode(src, dst, kernel);

3.2 膨胀

膨胀操作可以扩大图像中的前景物体,常用于填补前景物体中的空洞。

cv::dilate(src, dst, kernel);

3.3 开运算

开运算是先腐蚀后膨胀的操作,常用于去除小物体或噪声。

cv::morphologyEx(src, dst, cv::MORPH_OPEN, kernel);

3.4 闭运算

闭运算是先膨胀后腐蚀的操作,常用于填补前景物体中的小孔。

cv::morphologyEx(src, dst, cv::MORPH_CLOSE, kernel);

形态学梯度

形态学梯度是膨胀和腐蚀的差值,可以用于提取物体的边缘。

cv::morphologyEx(src, dst, cv::MORPH_GRADIENT, kernel);

4. 图像阈值化

图像阈值化是将图像转换为二值图像的过程,常用于图像分割。常见的阈值化方法包括二值化、自适应阈值和Otsu阈值法。

4.1 二值化

二值化是将图像中的像素值根据设定的阈值分为两类,通常用于简单的图像分割。

cv::threshold(src, dst, 127, 255, cv::THRESH_BINARY);

4.2 自适应阈值

自适应阈值根据图像的局部区域动态计算阈值,适用于光照不均匀的图像。

cv::adaptiveThreshold(src, dst, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 11, 2);

4.3 Otsu阈值法

Otsu阈值法是一种自动确定阈值的方法,适用于双峰直方图的图像。

cv::threshold(src, dst, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);

5. 图像直方图

直方图是图像处理中用于分析图像亮度分布的工具。常见的直方图操作包括计算直方图、直方图均衡化和直方图对比。

5.1 计算直方图

直方图可以反映图像中像素值的分布情况。

cv::Mat hist;
int histSize = 256;
float range[] = {0, 256};
const float* histRange = {range};
cv::calcHist(&src, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange);

5.2 直方图均衡化

直方图均衡化可以增强图像的对比度,使得图像的亮度分布更加均匀。

cv::equalizeHist(src, dst);

5.3 直方图对比

直方图对比可以用于比较两幅图像的相似性。

double compare = cv::compareHist(hist1, hist2, cv::HISTCMP_CORREL);

6. 实例

OpenCV 中常见的图像处理操作,包括滤波、边缘检测、阈值化、形态学操作和轮廓检测。通过这些技术,你可以实现更复杂的图像处理任务。以下是 C++ OpenCV 中常见的图像处理操作及其代码示例:

6.1 图像滤波

图像滤波用于去除噪声或增强图像特征。

均值滤波

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 均值滤波
    Mat blurredImage;
    blur(image, blurredImage, Size(5, 5)); // 5x5 的核
    imshow("Original Image", image);
    imshow("Blurred Image", blurredImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

高斯滤波

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 高斯滤波
    Mat gaussianBlurredImage;
    GaussianBlur(image, gaussianBlurredImage, Size(5, 5), 0); // 5x5 的核
    imshow("Original Image", image);
    imshow("Gaussian Blurred Image", gaussianBlurredImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

中值滤波

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 中值滤波
    Mat medianBlurredImage;
    medianBlur(image, medianBlurredImage, 5); // 核大小为 5
    imshow("Original Image", image);
    imshow("Median Blurred Image", medianBlurredImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

6.2 边缘检测

边缘检测用于提取图像中的边缘信息。

Canny 边缘检测

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    // Canny 边缘检测
    Mat edges;
    Canny(grayImage, edges, 100, 200); // 阈值1和阈值2
    imshow("Original Image", image);
    imshow("Canny Edges", edges);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

6.3 图像阈值化

阈值化用于将图像转换为二值图像。

简单阈值化

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    // 简单阈值化
    Mat binaryImage;
    threshold(grayImage, binaryImage, 127, 255, THRESH_BINARY);
    imshow("Original Image", image);
    imshow("Binary Image", binaryImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

自适应阈值化

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    // 自适应阈值化
    Mat adaptiveBinaryImage;
    adaptiveThreshold(grayImage, adaptiveBinaryImage, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 11, 2);
    imshow("Original Image", image);
    imshow("Adaptive Binary Image", adaptiveBinaryImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

6.4 形态学操作

形态学操作用于处理图像的形状和结构。

腐蚀与膨胀

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    // 二值化
    Mat binaryImage;
    threshold(grayImage, binaryImage, 127, 255, THRESH_BINARY);
    // 腐蚀操作
    Mat erodedImage;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
    erode(binaryImage, erodedImage, kernel);
    // 膨胀操作
    Mat dilatedImage;
    dilate(binaryImage, dilatedImage, kernel);
    imshow("Original Image", image);
    imshow("Eroded Image", erodedImage);
    imshow("Dilated Image", dilatedImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

6.5 轮廓检测

轮廓检测用于提取图像中的对象轮廓。

#include 
#include 
using namespace cv;
using namespace std;
int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        cout << "错误:无法加载图像,请检查路径是否正确。" << endl;
        return -1;
    }
    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    // 二值化
    Mat binaryImage;
    threshold(grayImage, binaryImage, 127, 255, THRESH_BINARY);
    // 查找轮廓
    vector> contours;
    vector hierarchy;
    findContours(binaryImage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
    // 绘制轮廓
    Mat contourImage = Mat::zeros(image.size(), CV_8UC3);
    for (size_t i = 0; i < contours.size(); i++) {
        drawContours(contourImage, contours, i, Scalar(0, 255, 0), 2);
    }
    imshow("Original Image", image);
    imshow("Contours", contourImage);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:动态规划之买卖股票的最佳时机III和IV

实用指南:动态规划之买卖股票的最佳时机III和IV2025-10-17 08:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

2025年行业内游乐设施/过山车游乐设施权威榜单厂家-河北天鸿游乐设备

河北天鸿游乐设备有限责任公司位于河北省衡水市,是一家专注于大型主题游乐设施研发、制造、安装及销售的高新技术机构,尤其在旋转塔和过山车领域具有行业领先地位,拥有大型游乐设施A级生产许可证。 推荐指数:9.5/1…

机器学习技术助力美国西海岸地震预警系统升级

加州理工学院研究团队利用机器学习技术和云计算平台,构建能够实时处理地震数据的新型预警系统。该系统通过深度学习算法将地震事件检测能力提升3-5倍,并能更精准定位地下断层位置。机器学习技术助力美国西海岸地震预…

2025年口碑好的挤浆机/单螺旋挤浆机TOP品牌推荐厂家-滕州市建兴机械有限公司

滕州市建兴机械有限公司自2003年起专注于浆渣物料连续脱水、压榨及固液分离设备的研发与制造,积累二十余年技术经验,在行业内具备深厚的技术沉淀和生产能力。产品广泛应用于造纸制浆、生物质能源、食品加工、植物提取…

2025年市场课桌椅/钢塑课桌椅最新TOP排名厂家-江西华聚智能家具集团有限公司

江西华聚智能家具集团概况 江西华聚智能家具集团有限公司成立于2022年,前身为江西省南城县发华实业,位于江西省抚州市南城县株良镇古竹工业园区,占地超过8万平方米。集团专注于高端校具的研发、制造与服务,产品涵盖…

2025年口碑好的垃圾袋/医疗垃圾袋排名推荐生产厂家-厦门市万塑环保材料有限公司

本网10月16日讯 厦门市万塑环保材料有限公司成立于2000年,位于厦门市集美北部工业区,是福建省首批专注生物降解塑料袋生产的企业之一。主要产品包括竹纤维降解垃圾袋、宠物垃圾袋、双色提醒拾便袋、婴儿尿布桶垃圾袋…

实用指南:docker镜像和容器

实用指南:docker镜像和容器pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

深入理解 PHP-FPM 的最佳配置

深入理解 PHP-FPM 的最佳配置 对大多数开发者来说,PHP-FPM 的配置并不是日常工作中需要深入研究的东西。这没什么问题,毕竟不是每个人都想或需要在服务器调优上花时间。 况且,现在有很多托管服务(宝塔, 1panel等)…

【GitHub每日速递 251017】95k star,程序员专属!超全做饭指南,涵盖千道美食做法与进阶秘籍

原文: https://mp.weixin.qq.com/s/1Jxssm-81SsuOQTi31fqKA 全球最大RSS网络RSSHub:聚合海量内容,开源社区超活跃! RSSHub 是一个将各类内容源转化为RSS订阅的工具。简单讲,它能让不支持RSS的网站也能生成RSS订阅链…

洛谷 P6715 [CCO 2018] Fun Palace (神秘DP)

模拟赛的神题。想了 4h 没有拼出任意一个多项式做法。 在赛后被同学指点了一下发现状态要这么设——设 \(f_{i,j}\) 表示考虑前 \(i\) 个房间,第 \(i\) 个房间所有时间内最大有 \(j\) 个人的情况下的最大总人数。 至于…

AT 随机做题 I

Randomly Problems Solving at AtCoder I 质量评分 \(\in[0,10]\),分为 \([0,4),[4,7),[7,10]\) 三个梯度,评分和难度弱相关。 上次更新:2025/10/16 注重思路。 [ABC 134 F] Permutation Oddness \(5\) 分。 排列计…

moni 32

事实是我好久没写模拟赛的总结了, 想了想这点东西当日记还是太糖了,(主要是不想写) 直接来吧,预估 \(100 + 100 + 65 + 0\),实际 \(100 + 0 + 65 + 0\)。 挂分原因,交错代码了。 故事是这样的。 我感觉我自己 T…

git 舍弃当前所有修改

在 Git 中,如果你想要舍弃当前所有未提交的修改(包括工作区和暂存区的更改) git reset --hard这会:重置暂存区(index) 重置工作区(working directory) 丢弃所有未提交的修改可选:同时清理未跟踪的文件(如新添…

2025.10.17——1蓝

提高+/省选- P3230 [HNOI2013] 比赛 补题,前天开的暑假集训题,看了题解后花了几天时间理解。很精妙的记忆化搜索。

C# 使用 using 关键字间接实现只读局部变量的方法

众所周知,在 C# 里面是没有只读局部变量的功能的。但有趣的 C# 语法让咱可以使用现有的 using 关键字间接实现只读局部变量在 C# 里面引入只读局部变量是一个存在 C# 语言设计仓库里面很久的讨论,详细请看 https://g…

高校与某中心共建机器人技术教育项目

某机器人与汉普顿大学合作建立机器人学位项目,包括新建研究实验室、人工智能与机器学习教职岗位、高级课程指导,以及K-12编程扩展计划,旨在培养多元化机器人技术人才。某机器人与汉普顿大学合作建立机器人项目 某中…

2025年国际物流服务领域优质品牌最新推荐排行榜 —— 聚焦行业头部企业核心优势与选择参考

在全球化贸易深度推进的背景下,跨境电商行业规模持续扩大,国际物流作为连接全球市场的关键纽带,其服务质量与效率直接影响跨境商家的运营成本、客户体验及市场竞争力。然而,当前国际物流市场品牌众多,服务能力参差…

WordPress维护模式完整指南:手动实现与插件方案

本文详细介绍了WordPress网站维护模式的两种实现方式:通过手动添加PHP代码到子主题的functions.php文件,或使用LightStart插件。包含完整代码示例、启用禁用方法和注意事项,适合开发者在进行重大更新时使用。WordPr…

Lean语言如何连接数学与编程

Lean作为函数式编程语言和交互式定理证明器,在形式化数学、软硬件验证、AI辅助数学与代码合成以及计算机教育等领域具有广泛应用。文章详细介绍了Lean语言的设计理念、核心功能及在多个开源项目中的实际应用案例。Lea…