1樓:乙個青年
計算原理如下:
假設一副二值**,其背景是黑色的,而邊緣是白色的,而且白色邊緣中不包含黑色的點,就如附件中的那個影象。
程式原始碼如下:
%% step 1
clear all
clci=imread('test.bmp');%讀入**
bwi=im2bw(i,0.5);%轉化為二值影象
l=bwlabel(bwi,4);%將四連通區域進行標記
[r,c]=find(l==1);%查詢其中的白色區域,r是白點的所在行組成的向量,c是白點所在的列組成的向量
%% step 2 %去除r中重複的數
new_r=;
for i=1:length(r)
nn=find(new_r==r(i));
if isempty(nn),new_r=[new_r r(i)];end
end%% step 3
sum_zeros=0;%輪廓中總的點的個數
for i=1:length(new_r)
n=find(bwi(new_r(i),:)==1);%查詢有白點的行中白點所在的位置
if length(n)==1,continue;end%如果該行中只有乙個白點,則返回
num_zeros=n(end)-n(1)+1-length(n);%否則計算夾在白點之間的黑點的個數
sum_zeros=sum_zeros+num_zeros;
end二值化圖例項如下(即黑白兩色):
擴充套件資料:
c語言實現原始碼:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"
#include
#include
#include "cv.h"
#include "highgui.h"
#include
#include
#include
#include
using namespace std;
using namespace cv;
//統計一幅**中白色畫素點和黑色畫素點佔整幅圖的比例
int bsums(mat src)
else
}double bilib = counter * 1.0 / n * 1.0 * 100 * 1.0;
double bilih = black * 1.0 / n * 1.0 * 100 * 1.0;
cout << "counter:" << counter << endl;
cout << "black:" << black << endl;
cout << "n:" << n << endl;
cout << "bilib:" << bilib << endl;
cout << "bilih:" << bilih << endl;
return counter;
}int main(int agrc, char** agrv)
2樓:shine戚七七
下面是乙個簡單的計算輪廓包含起來的畫素點的個數的程式:
%% step 1
clear all
clci=imread('test.bmp');%讀入**
bwi=im2bw(i,0.5);%轉化為二值影象
l=bwlabel(bwi,4);%將四連通區域進行標記
[r,c]=find(l==1);%查詢其中的白色區域,r是白點的所在行組成的向量,c是白點所在的列組成的向量
%% step 2 %去除r中重複的數
new_r=;
for i=1:length(r)
nn=find(new_r==r(i));
if isempty(nn),new_r=[new_r r(i)];end
end%% step 3
sum_zeros=0;%輪廓中總的點的個數
for i=1:length(new_r)
n=find(bwi(new_r(i),:)==1);%查詢有白點的行中白點所在的位置
if length(n)==1,continue;end%如果該行中只有乙個白點,則返回
num_zeros=n(end)-n(1)+1-length(n);%否則計算夾在白點之間的黑點的個數
sum_zeros=sum_zeros+num_zeros;
end就是這樣的,比如這一行是這樣的001110000011100,那麼step3中的n就是乙個向量:3 4 5 11 12 13,這六個數分別是這行中白點的位置,那麼其中的夾在1之間的0的個數就是:13-3+1-6=5 。
3樓:匿名使用者
如何用matlab計算已知影象的熵
function entr yentropy a a uint8 a 這裡a為8位的單色影象或24為的rgb彩色影象 m n l size a entr 0 for k 1 l hi zeros 1,256 for i 1 m for j 1 n hi a i,j,k 1 hi a i,j,k 1 ...
如何用matlab解決這道題目,如何用matlab解決這道題目
a 0.04 0.04 0.12 0.56,1.56,0.32 0.24,1.24,0.28 y 3,1,0 x inv a y x就是結果。如何用matlab求解這道題目?求超線性方程組 rng b randi 10,3,1 a 1 1 1 1 1 2 x a b matlab 中 左除 會按照最...
如何用matlab畫二維sinc函式的影象
若能畫出類似下面那張圖就好了,希望能給出matlab完整語句 x 10 0.1 10 y sinc x plot x,y 用matlab實現圖上的sinc函式!非常感謝!用matlab實現圖上的sinc函式的 為t linspace 100,100 t0 2 a 1 t t t0 a y sinc ...