- 图片加载、灰度图、 显示和保存
| cv::Mat img = cv::imread("01.jpg"); |
| |
| |
| cv::cvtColor(img, img, cv::COLOR_BGR2GRAY); |
| |
| cv::imshow("img_show", img); |
| cv::waitKey(); |
| |
| cv::imwrite("save.jpg", img); |
- 图片宽、高、通道模式、平均值获取
| cv::Mat img = cv::imread("01.jpg"); |
| |
| int width = img.cols; |
| int height = img.rows; |
| int channel_model = img.channels(); |
| |
| cv::Scalar tempVal = cv::mean(img); |
| float mean_B = tempVal.val[0]; |
| float mean_G = tempVal.val[1]; |
| float mean_R = tempVal.val[2]; |
- 创建指定大小,指定通道类型的空图像
| cv::Mat img = cv::imread("01.jpg"); |
| |
| cv::Mat img_new1(300, 500, CV_8UC3); |
| cv::Mat img_new2(img.size(), CV_8UC1); |
- 访问和操作图像像素
| int point_height = 50; |
| int point_width = 100; |
| |
| cv::Mat img = cv::imread("01.jpg"); |
| |
| img.at<cv::Vec3b>(point_height, point_width)[0] = 255; |
| int point_value_B = img.at<cv::Vec3b>(point_height, point_width)[0]; |
| |
| cv::Mat img_gray; |
| cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY); |
| |
| int point_value_gray = img_gray.at<uchar>(point_height, point_width); |
| |
| img_gray.convertTo(img_gray, CV_32F); |
| float point_value_gray_f = img_gray.at<float>(point_height, point_width); |
- 图像通道分离和合并
| cv::Mat img = cv::imread("01.jpg"); |
| |
| std::vector<cv::Mat> rgb_images; |
| cv::split(img, rgb_images); |
| |
| cv::Mat B = rgb_images[0]; |
| cv::Mat G = rgb_images[1] ; |
| cv::Mat R = rgb_images[2]; |
| |
| cv::Mat merged_img; |
| cv::merge(rgb_images, merged_img); |
- 在图像上输出文字
| cv::Mat img = cv::imread("01.jpg"); |
| cv::putText(img, "Text", cv::Point(50, 100), 0, 2, cv::Scalar(0, 0, 255)); |
- 图像缩放
| cv::Mat img = cv::imread("01.jpg"); |
| cv::resize(img, img, cv::Size(0.5 * img.cols , 0.5 * img.rows), 0, 0, cv::INTER_CUBIC); |
- 查找非零值像素位置
| |
| cv::Mat img = cv::imread("01.jpg", 0); |
| std::vector<cv::Point> locations; |
| cv::findNonZero(img, locations); |
| |
| for (int i = 0; i < locations.size(); i++) { |
| cv::Point pt = locations[i]; |
| int pt_value = img.at<uchar>(pt); |
| std::cout<<pt_value<<std::endl; |
| } |
- 图像阈值分割、 二值化
| cv::Mat img = cv::imread("01.jpg", 0); |
| cv::Mat img_binary; |
| cv::threshold(img, img_binary, 100, 255, cv::THRESH_BINARY); |
| |
| cv::Mat img_Otsu; |
| cv::threshold(img, img_Otsu, 0, 255, cv::THRESH_OTSU); |
- 图像裁剪、ROI
| cv::Mat img = cv::imread("01.jpg"); |
| cv::Rect rect(100, 200, 500, 300); |
| cv::Mat roi = img(rect).clone(); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)