64,282
社区成员
发帖
与我相关
我的任务
分享
#include<opencv2\opencv.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
void minRGB(Mat img1,Mat img2)
{
int row = img1.rows;
int col = img1.cols;
for(int j=0;j<row;j++){
for(int i=0;i<col;i++){
uchar min;
img1.at<cv::Vec3b>(j,i)[0] >= img1.at<cv::Vec3b>(j,i)[1]?min=img1.at<cv::Vec3b>(j,i)[1]:
min=img1.at<cv::Vec3b>(j,i)[0];
if(min>=img1.at<cv::Vec3b>(j,i)[2])
min=img1.at<cv::Vec3b>(j,i)[2];
img2.at<uchar>(j,i)=min;
}
}
}
void minROI(Mat &img,Mat &outImg)
{
int p=3;
//cout << "请输入模板尺度:" << endl;
//cin >> p;
uchar mmin=255;
for(int i=0; i<img.rows;++i)
{
for(int j=0; j<img.cols;++j)
{
Mat imgROI = img(Rect(i,j,p,p));
for(int m=0; m < p;++m)
{
for(int n=0; n < p; ++n)
{
if(mmin > imgROI.at<uchar>(m,n))
{
mmin = imgROI.at<uchar>(m,n);
}
}
}
out.at<uchar>(i,j) =mmin;
}
}
}
int main()
{
Mat img1;
img1 = imread("mai1.jpg",1);
//resize(img1,img1,Size(100,100),0,0,1);
int row = img1.rows;
int col = img1.cols;
int channel = img1.channels();
Mat img2(img1.rows,img1.cols,CV_8UC1);
Mat img3(img2.size(),CV_8UC1);
minRGB(img1,img2);
minROI(img2,img3);
imshow("原图",img1);
imshow("暗通道1",img2);
imshow("暗通道2",img3);
waitKey(0);
return 0;
}